當前位置:首頁 » 存儲配置 » 分類存儲過程

分類存儲過程

發布時間: 2022-04-20 15:32:21

1. 關於sql sever 的系統存儲過程

存儲過程分為三類:
系統存儲過程:(System stored Procere)sp_開頭,為SQLSERVER內置存儲過程。
擴展存儲過程:(Extended stored Procere),也就是外掛程序,用於擴展SQLSERVER的功能,以sp_或者xp_開頭,以DLL的形式單獨存在。

(系統存儲過程和擴展存儲過程都是在master資料庫中。sp_開頭的可是全局的,任何一個資料庫都可以直接調用的。)
系統存儲過程主要分為以下幾類:

目錄存儲過程,例如:
sp_columns 返回當前環境中可查詢的指定表或視圖的列信息。
sp_tables 返回當前環境下可查詢的對象的列表(任何可出現在 FROM 子句中的對象)。
sp_stored_proceres 返回當前環境中的存儲過程列表。

復制類存儲過程,例如:
sp_addarticle 創建項目並將其添加到發布中。此存儲過程在發布伺服器的發布資料庫上執行。

安全管理類存儲過程,例如:
sp_addrole 在當前資料庫創建新的 Microsoft�0�3 SQL Server�6�4 角色。
sp_password 添加或更改 Microsoft�0�3 SQL Server�6�4 登錄的密碼。

分布式查詢存儲過程,例如:
sp_foreignkeys 返回引用主鍵的外鍵,這些主鍵在鏈接伺服器中的表上。
sp_primarykeys 返回指定遠程表的主鍵列,每個鍵列佔一行。

擴展存儲過程:
xp_sendmail 向指定的收件人發送郵件和查詢結果集附件。
xp_startmail 啟動 SQL 郵件客戶端會話。
xp_cmdshell 以操作系統命令行解釋器的方式執行給定的命令字元串,並以文本行方式返回任何輸出。授予非管理用戶執行xp_cmdshell 的許可權。

用戶定義的存儲過程:(User-defined stored Procere),這個就是用戶在具體的資料庫中自己定義的,名字最好不要以sp_和xp_開頭,防止混亂。

注意事項:
1.在存儲過程中,有些建立對象的語句是不可使用的:create default,create trigger,create procere,create view,create rule.
2.在同一資料庫中,不同的所有者可以建立相同名稱的對象名。例如:a.sample,b.sample,c.sample三個數據表可以同時存在。如果存儲過程中未指明對象的所有者(例如存儲過程中的語句select * from sample,這句中的sample沒有指明所有者),在執行的過程中默認的所有者查找順序是:相應的存儲過程的建立者->相應資料庫的所有者。如果這個查找過程中沒有把所有者確定下來,系統就要報錯。
(這里我額外插一句:如果需要嚴密的數據操作,在任何操作中盡量加上所有者,例如leijun.sample)
3.在存儲過程名稱前邊添加#或者##,所建立的存儲過程則是「臨時存儲過程「(#是局部臨時存儲過程,##是全局臨時存儲過程)。

2. 寫一個存儲過程對用戶表中的年齡進行分類

TYPE表中的第個類型代表一個年齡區間,即然是區間,那麼就需要一個明確的起始值,而不是靠人為去判斷每個年齡段的起始年齡。假定TYPE表增加一個欄位,typevaluemin 代表每個年齡段的最小年齡值,那麼,可以直接用一條語句就查詢出來,沒有必要再弄個存儲過程

---mssqlserver代碼,newid沒有說明生成規則,所以未列出此欄位取值
insertinto(uid,typeid)
selecta.uid,b.typeid
from[user]a
leftjoin[type]bona.uagebetweenb.typevalueminandb.typevalue

----如果確實不方便添加欄位,可以使用自動計算的方式提取最小值,代碼如下:
insertinto(uid,typeid)
selecta.uid,b.typeid
from[user]a
leftjoin
(select
id
,typeid
,typename
,typevaluemin=isnull((selecttop1typevalue+1astypevalueminfrom[type]wheretypevalue<x.typevalueorderbytypevaluedesc),0)
,typevalue
from[type]x
)bona.uagebetweenb.typevalueminandb.typevalue

--另外,因為「張7/趙六」的年齡段在TYPE表中不存在,因此,他們的類型為NULL

3. 試說明存儲過程的主要優點及分類

過程:
把冰箱門打開,把大象放進去,再把冰箱門帶上。
這就把大象儲存起來了。

4. 資料庫原理-存儲過程的類型有哪些分別有什麼特徵。

(3).存儲過程分類<1>.系統存儲過程系統存儲過程(System
Stored
Proceres)主要存儲在master資料庫中,並以sp_為前綴,並且系統存儲過程主要是從系統表中獲取信息,從而為系統管理員管理SQL
Server提供支持。<2>.本地存儲過程本地存儲過程(Local
Stored
Proceres)也就是用戶自行創建在用戶資料庫中的存儲過程。事實上一般所說的存儲過程值得就是本地存儲過程。用戶創建的存儲過程是由用戶創建並能完成某一特定功能(如查詢用戶所需的數據信息)的存儲過程。<3>.臨時存儲過程臨時存儲過程(Temporary
Stored
Proceres)可分為以下兩種:A.本地臨時存儲過程如果在創建存儲過程中,以井號(#)作為其名稱的第一個字元,則該存儲過程將成為一個存放在tempdb資料庫中的本地臨時存儲過程(例如,CREATE
PROCEDURE
#book_proc.....)。本地臨時存儲過程只有創建它的連接的用戶才能夠執行它,而且一旦這位用戶斷開與SQL
Server的連接,本地臨時存儲過程就會自動刪除,當然,這位用戶也可以在連接期間用DROP
PROCEDURE命令刪除多創建的本地臨時存儲過程。B.全局臨時存儲過程如果在所創建的存儲過程名稱是以兩個井號(#
#)開始,則該存儲過程將成為一個存儲在tempdb資料庫中的全局臨時存儲過程,如果沒有,便立即將全局臨時存儲過程刪除;如果有,SQL
Server會讓這些執行中的操作繼續進行,但是不允許任何用戶再執行全局臨時存儲過程,等到所有未完成的操作執行完畢後,全局臨時存儲過程就會自動刪除。由於全局臨時存儲過程能夠被所有的連接用戶使用,因此,必須注意其名稱不能和其他連接所採用的名稱相同。<4>.遠程存儲過程遠程存儲過程(Remote
Stored
Proceres)是位於遠程伺服器上的存儲過程,通常可以使用分布式查詢和EXECUTE命令執行一個遠程存儲過程。

5. 如何實現用戶自己的數據文件的分類存放策略

1 虛擬存儲技術的產生
虛擬化技術並不是一件很新的技術,它的發展,應該說是隨著計算機技術的發展而發展起來的,最早是始於70年代.由於當時的存儲容量,特別是內存容量成本非常高,容量也很小,對於大型應用程序或多程序應用就受到了很大的限制.為了克服這樣的限制,人們就採用了虛擬存儲的技術,最典型的應用就是虛擬內存技術.隨著計算機技術以及相關信息處理技術的不斷發展,人們對存儲的需求越來越大.這樣的需求刺激了各種新技術的出現,比如磁碟性能越來越好,容量越來越大.但是在大量的大中型信息處理系統中,單個磁碟是不能滿足需要,這樣的情況下存儲虛擬化技術就發展起來了.在這個發展過程中也由幾個階段和幾種應用.首先是磁碟條帶集(RAID,可帶容錯)技術,將多個物理磁碟通過一定的邏輯關系集合起來,成為一個大容量的虛擬磁碟.而隨著數據量不斷增加和對數據可用性要求的不斷提高,又一種新的存儲技術應運而生,那就是存儲區域網路(SAN)技術.SAN的廣域化則旨在將存儲設備實現成為一種公用設施,任何人員,任何主機都可以隨時隨地獲取各自想要的數據.目前討論比較多的包括iSCSI,FC Over IP 等技術,由於一些相關的標准還沒有最終確定,但是存儲設備公用化,存儲網路廣域化是一個不可逆轉的潮流.
2 虛擬存儲的概念
所謂虛擬存儲,就是把多個存儲介質模塊(如硬碟,RAID)通過一定的手段集中管理起來,所有的存儲模塊在一個存儲池(Storage Pool)中得到統一管理,從主機和工作站的角度,看到就不是多個硬碟,而是一個分區或者卷,就好象是一個超大容量(如1T以上)的硬碟.這種可以將多種,多個存儲設備統一管理起來,為使用者提供大容量,高數據傳輸性能的存儲系統,就稱之為虛擬存儲.
虛擬存儲的分類
目前虛擬存儲的發展尚無統一標准,從虛擬化存儲的拓撲結構來講主要有兩種方式:即對稱式與非對稱式.對稱式虛擬存儲技術是指虛擬存儲控制設備與存儲軟體系統,交換設備集成為一個整體,內嵌在網路數據傳輸路徑中;非對稱式虛擬存儲技術是指虛擬存儲控制設備獨立於數據傳輸路徑之外.從虛擬化存儲的實現原理來講也有兩種方式;即數據塊虛擬與虛擬文件系統.具體如下:

A.對稱式虛擬存儲
圖1
圖1對稱式虛擬存儲解決方案的示意圖
在圖1所示的對稱式虛擬存儲結構圖中,存儲控制設備 High Speed Traffic Directors(HSTD)與存儲池子系統Storage Pool集成在一起,組成SAN Appliance.可以看到在該方案中存儲控制設備HSTD在主機與存儲池數據交換的過程中起到核心作用.該方案的虛擬存儲過程是這樣的:由HSTD內嵌的存儲管理系統將存儲池中的物理硬碟虛擬為邏輯存儲單元(LUN),並進行埠映射(指定某一個LUN能被哪些埠所見),主機端將各可見的存儲單元映射為操作系統可識別的盤符.當主機向SAN Appliance寫入數據時,用戶只需要將數據寫入位置指定為自己映射的盤符(LUN),數據經過HSTD的高速並行埠,先寫入高速緩存,HSTD中的存儲管理系統自動完成目標位置由LUN到物理硬碟的轉換,在此過程中用戶見到的只是虛擬邏輯單元,而不關心每個LUN的具體物理組織結構.該方案具有以下主要特點:
(1)採用大容量高速緩存,顯著提高數據傳輸速度.
緩存是存儲系統中廣泛採用的位於主機與存儲設備之間的I/O路徑上的中間介質.當主機從存儲設備中讀取數據時,會把與當前數據存儲位置相連的數據讀到緩存中,並把多次調用的數據保留在緩存中;當主機讀數據時,在很大幾率上能夠從緩存中找到所需要的數據.直接從緩存上讀出.而從緩存讀取數據時的速度只受到電信號傳播速度的影響(等於光速),因此大大高於從硬碟讀數據時碟片機械轉動的速度.當主機向存儲設備寫入數據時,先把數據寫入緩存中,待主機端寫入動作停止,再從緩存中將數據寫入硬碟,同樣高於直接寫入硬碟的速度
(2)多埠並行技術,消除了I/O瓶頸.
傳統的FC存儲設備中控制埠與邏輯盤之間是固定關系,訪問一塊硬碟只能通過控制它的控制器埠.在對稱式虛擬存儲設備中,SAN Appliance的存儲埠與LUN的關系是虛擬的,也就是說多台主機可以通過多個存儲埠(最多8個)並發訪問同一個LUN;在光纖通道100MB/帶寬的大前提下,並行工作的埠數量越多,數據帶寬就越高.
(3)邏輯存儲單元提供了高速的磁碟訪問速度.
在視頻應用環境中,應用程序讀寫數據時以固定大小的數據塊為單位(從512byte到1MB之間).而存儲系統為了保證應用程序的帶寬需求,往往設計為傳輸512byte以上的數據塊大小時才能達到其最佳I/O性能.在傳統SAN結構中,當容量需求增大時,唯一的解決辦法是多塊磁碟(物理或邏輯的)綁定為帶區集,實現大容量LUN.在對稱式虛擬存儲系統中,為主機提供真正的超大容量,高性能LUN,而不是用帶區集方式實現的性能較差的邏輯卷.與帶區集相比,Power LUN具有很多優勢,如大塊的I/O block會真正被存儲系統所接受,有效提高數據傳輸速度;並且由於沒有帶區集的處理過程,主機CPU可以解除很大負擔,提高了主機的性能.
(4)成對的HSTD系統的容錯性能.
在對稱式虛擬存儲系統中,HSTD是數據I/O的必經之地,存儲池是數據存放地.由於存儲池中的數據具有容錯機制保障安全,因此用戶自然會想到HSTD是否有容錯保護.象許多大型存儲系統一樣,在成熟的對稱式虛擬存儲系統中,HSTD是成對配製的,每對HSTD之間是通過SAN Appliance內嵌的網路管理服務實現緩存數據一致和相互通信的.
(5)在SAN Appliance之上可方便的連接交換設備,實現超大規模Fabric結構的SAN.
因為系統保持了標準的SAN結構,為系統的擴展和互連提供了技術保障,所以在SAN Appliance之上可方便的連接交換設備,實現超大規模Fabric結構的SAN.
B.非對稱式虛擬存儲系統
圖2
圖2非對稱式虛擬存儲系統示意圖
在圖2所示的非對稱式虛擬存儲系統結構圖中,網路中的每一台主機和虛擬存儲管理設備均連接到磁碟陣列,其中主機的數據路徑通過FC交換設備到達磁碟陣列;虛擬存儲設備對網路上連接的磁碟陣列進行虛擬化操作,將各存儲陣列中的LUN虛擬為邏輯帶區集(Strip),並對網路上的每一台主機指定對每一個Strip的訪問許可權(可寫,可讀,禁止訪問).當主機要訪問某個Strip時,首先要訪問虛擬存儲設備,讀取Strip信息和訪問許可權,然後再通過交換設備訪問實際的Strip中的數據.在此過程中,主機只會識別到邏輯的strip,而不會直接識別到物理硬碟.這種方案具有如下特點:
(1)將不同物理硬碟陣列中的容量進行邏輯組合,實現虛擬的帶區集,將多個陣列控制器埠綁定,在一定程度上提高了系統的可用帶寬.
(2)在交換機埠數量足夠的情況下,可在一個網路內安裝兩台虛擬存儲設備,實現Strip信息和訪問許可權的冗餘.
但是該方案存在如下一些不足:
(1)該方案本質上是帶區集——磁碟陣列結構,一旦帶區集中的某個磁碟陣列控制器損壞,或者這個陣列到交換機路徑上的銅纜,GBIC損壞,都會導致一個虛擬的LUN離線,而帶區集本身是沒有容錯能力的,一個LUN的損壞就意味著整個Strip裡面數據的丟失.
(2)由於該方案的帶寬提高是通過陣列埠綁定來實現的,而普通光纖通道陣列控制器的有效帶寬僅在40MB/S左右,因此要達到幾百兆的帶寬就意味著要調用十幾台陣列,這樣就會佔用幾十個交換機埠,在只有一兩台交換機的中小型網路中,這是不可實現的.
(3)由於各種品牌,型號的磁碟陣列其性能不完全相同,如果出於虛擬化的目的將不同品牌,型號的陣列進行綁定,會帶來一個問題:即數據寫入或讀出時各並發數據流的速度不同,這就意味著原來的數據包順序在傳輸完畢後被打亂,系統需要佔用時間和資源去重新進行數據包排序整理,這會嚴重影響系統性能.
4 數據塊虛擬與虛擬文件系統
以上從拓撲結構角度分析了對稱式與非對稱式虛擬存儲方案的異同,實際從虛擬化存儲的實現原理來講也有兩種方式;即數據塊虛擬與虛擬文件系統.
數據塊虛擬存儲方案著重解決數據傳輸過程中的沖突和延時問題.在多交換機組成的大型Fabric結構的SAN中,由於多台主機通過多個交換機埠訪問存儲設備,延時和數據塊沖突問題非常嚴重.數據塊虛擬存儲方案利用虛擬的多埠並行技術,為多台客戶機提供了極高的帶寬,最大限度上減少了延時與沖突的發生,在實際應用中,數據塊虛擬存儲方案以對稱式拓撲結構為表現形式.
虛擬文件系統存儲方案著重解決大規模網路中文件共享的安全機制問題.通過對不同的站點指定不同的訪問許可權,保證網路文件的安全.在實際應用中,虛擬文件系統存儲方案以非對稱式拓撲結構為表現形式.
虛擬存儲技術和這門課的結合點
本學期的這門課中,所涉及的虛擬存儲技術,實際上是虛擬存儲技術的一個方面,特指以CPU時間和外存空間換取昂貴內存空間的操作系統中的資源轉換技術
基本思想:程序,數據,堆棧的大小可以超過內存的大小,操作系統把程序當前使用的部分保留在內存,而把其他部分保存在磁碟上,並在需要時在內存和磁碟之間動態交換,虛擬存儲器支持多道程序設計技術
目的:提高內存利用率
管理方式
A 請求式分頁存儲管理
在進程開始運行之前,不是裝入全部頁面,而是裝入一個或零個頁面,之後根據進程運行的需要,動態裝入其他頁面;當內存空間已滿,而又需要裝入新的頁面時,則根據某種演算法淘汰某個頁面,以便裝入新的頁面
B 請求式分段存儲管理
為了能實現虛擬存儲,段式邏輯地址空間中的程序段在運行時並不全部裝入內存,而是如同請求式分頁存儲管理,首先調入一個或若干個程序段運行,在運行過程中調用到哪段時,就根據該段長度在內存分配一個連續的分區給它使用.若內存中沒有足夠大的空閑分區,則考慮進行段的緊湊或將某段或某些段淘汰出去,這種存儲管理技術稱為請求式分段存儲管理
現在團IDC網上有45元/年美國空間的團購,便宜有口碑
1 虛擬存儲技術的產生
虛擬化技術並不是一件很新的技術,它的發展,應該說是隨著計算機技術的發展而發展起來的,最早是始於70年代.由於當時的存儲容量,特別是內存容量成本非常高,容量也很小,對於大型應用程序或多程序應用就受到了很大的限制.為了克服這樣的限制,人們就採用了虛擬存儲的技術,最典型的應用就是虛擬內存技術.隨著計算機技術以及相關信息處理技術的不斷發展,人們對存儲的需求越來越大.這樣的需求刺激了各種新技術的出現,比如磁碟性能越來越好,容量越來越大.但是在大量的大中型信息處理系統中,單個磁碟是不能滿足需要,這樣的情況下存儲虛擬化技術就發展起來了.在這個發展過程中也由幾個階段和幾種應用.首先是磁碟條帶集(RAID,可帶容錯)技術,將多個物理磁碟通過一定的邏輯關系集合起來,成為一個大容量的虛擬磁碟.而隨著數據量不斷增加和對數據可用性要求的不斷提高,又一種新的存儲技術應運而生,那就是存儲區域網路(SAN)技術.SAN的廣域化則旨在將存儲設備實現成為一種公用設施,任何人員,任何主機都可以隨時隨地獲取各自想要的數據.目前討論比較多的包括iSCSI,FC Over IP 等技術,由於一些相關的標准還沒有最終確定,但是存儲設備公用化,存儲網路廣域化是一個不可逆轉的潮流.
2 虛擬存儲的概念
所謂虛擬存儲,就是把多個存儲介質模塊(如硬碟,RAID)通過一定的手段集中管理起來,所有的存儲模塊在一個存儲池(Storage Pool)中得到統一管理,從主機和工作站的角度,看到就不是多個硬碟,而是一個分區或者卷,就好象是一個超大容量(如1T以上)的硬碟.這種可以將多種,多個存儲設備統一管理起來,為使用者提供大容量,高數據傳輸性能的存儲系統,就稱之為虛擬存儲.
虛擬存儲的分類
目前虛擬存儲的發展尚無統一標准,從虛擬化存儲的拓撲結構來講主要有兩種方式:即對稱式與非對稱式.對稱式虛擬存儲技術是指虛擬存儲控制設備與存儲軟體系統,交換設備集成為一個整體,內嵌在網路數據傳輸路徑中;非對稱式虛擬存儲技術是指虛擬存儲控制設備獨立於數據傳輸路徑之外.從虛擬化存儲的實現原理來講也有兩種方式;即數據塊虛擬與虛擬文件系統.具體如下:

A.對稱式虛擬存儲
圖1
圖1對稱式虛擬存儲解決方案的示意圖
在圖1所示的對稱式虛擬存儲結構圖中,存儲控制設備 High Speed Traffic Directors(HSTD)與存儲池子系統Storage Pool集成在一起,組成SAN Appliance.可以看到在該方案中存儲控制設備HSTD在主機與存儲池數據交換的過程中起到核心作用.該方案的虛擬存儲過程是這樣的:由HSTD內嵌的存儲管理系統將存儲池中的物理硬碟虛擬為邏輯存儲單元(LUN),並進行埠映射(指定某一個LUN能被哪些埠所見),主機端將各可見的存儲單元映射為操作系統可識別的盤符.當主機向SAN Appliance寫入數據時,用戶只需要將數據寫入位置指定為自己映射的盤符(LUN),數據經過HSTD的高速並行埠,先寫入高速緩存,HSTD中的存儲管理系統自動完成目標位置由LUN到物理硬碟的轉換,在此過程中用戶見到的只是虛擬邏輯單元,而不關心每個LUN的具體物理組織結構.該方案具有以下主要特點:
(1)採用大容量高速緩存,顯著提高數據傳輸速度.
緩存是存儲系統中廣泛採用的位於主機與存儲設備之間的I/O路徑上的中間介質.當主機從存儲設備中讀取數據時,會把與當前數據存儲位置相連的數據讀到緩存中,並把多次調用的數據保留在緩存中;當主機讀數據時,在很大幾率上能夠從緩存中找到所需要的數據.直接從緩存上讀出.而從緩存讀取數據時的速度只受到電信號傳播速度的影響(等於光速),因此大大高於從硬碟讀數據時碟片機械轉動的速度.當主機向存儲設備寫入數據時,先把數據寫入緩存中,待主機端寫入動作停止,再從緩存中將數據寫入硬碟,同樣高於直接寫入硬碟的速度
(2)多埠並行技術,消除了I/O瓶頸.
傳統的FC存儲設備中控制埠與邏輯盤之間是固定關系,訪問一塊硬碟只能通過控制它的控制器埠.在對稱式虛擬存儲設備中,SAN Appliance的存儲埠與LUN的關系是虛擬的,也就是說多台主機可以通過多個存儲埠(最多8個)並發訪問同一個LUN;在光纖通道100MB/帶寬的大前提下,並行工作的埠數量越多,數據帶寬就越高.
(3)邏輯存儲單元提供了高速的磁碟訪問速度.
在視頻應用環境中,應用程序讀寫數據時以固定大小的數據塊為單位(從512byte到1MB之間).而存儲系統為了保證應用程序的帶寬需求,往往設計為傳輸512byte以上的數據塊大小時才能達到其最佳I/O性能.在傳統SAN結構中,當容量需求增大時,唯一的解決辦法是多塊磁碟(物理或邏輯的)綁定為帶區集,實現大容量LUN.在對稱式虛擬存儲系統中,為主機提供真正的超大容量,高性能LUN,而不是用帶區集方式實現的性能較差的邏輯卷.與帶區集相比,Power LUN具有很多優勢,如大塊的I/O block會真正被存儲系統所接受,有效提高數據傳輸速度;並且由於沒有帶區集的處理過程,主機CPU可以解除很大負擔,提高了主機的性能.
(4)成對的HSTD系統的容錯性能.
在對稱式虛擬存儲系統中,HSTD是數據I/O的必經之地,存儲池是數據存放地.由於存儲池中的數據具有容錯機制保障安全,因此用戶自然會想到HSTD是否有容錯保護.象許多大型存儲系統一樣,在成熟的對稱式虛擬存儲系統中,HSTD是成對配製的,每對HSTD之間是通過SAN Appliance內嵌的網路管理服務實現緩存數據一致和相互通信的.
(5)在SAN Appliance之上可方便的連接交換設備,實現超大規模Fabric結構的SAN.
因為系統保持了標準的SAN結構,為系統的擴展和互連提供了技術保障,所以在SAN Appliance之上可方便的連接交換設備,實現超大規模Fabric結構的SAN.
B.非對稱式虛擬存儲系統
圖2
圖2非對稱式虛擬存儲系統示意圖
在圖2所示的非對稱式虛擬存儲系統結構圖中,網路中的每一台主機和虛擬存儲管理設備均連接到磁碟陣列,其中主機的數據路徑通過FC交換設備到達磁碟陣列;虛擬存儲設備對網路上連接的磁碟陣列進行虛擬化操作,將各存儲陣列中的LUN虛擬為邏輯帶區集(Strip),並對網路上的每一台主機指定對每一個Strip的訪問許可權(可寫,可讀,禁止訪問).當主機要訪問某個Strip時,首先要訪問虛擬存儲設備,讀取Strip信息和訪問許可權,然後再通過交換設備訪問實際的Strip中的數據.在此過程中,主機只會識別到邏輯的strip,而不會直接識別到物理硬碟.這種方案具有如下特點:
(1)將不同物理硬碟陣列中的容量進行邏輯組合,實現虛擬的帶區集,將多個陣列控制器埠綁定,在一定程度上提高了系統的可用帶寬.
(2)在交換機埠數量足夠的情況下,可在一個網路內安裝兩台虛擬存儲設備,實現Strip信息和訪問許可權的冗餘.
但是該方案存在如下一些不足:
(1)該方案本質上是帶區集——磁碟陣列結構,一旦帶區集中的某個磁碟陣列控制器損壞,或者這個陣列到交換機路徑上的銅纜,GBIC損壞,都會導致一個虛擬的LUN離線,而帶區集本身是沒有容錯能力的,一個LUN的損壞就意味著整個Strip裡面數據的丟失.
(2)由於該方案的帶寬提高是通過陣列埠綁定來實現的,而普通光纖通道陣列控制器的有效帶寬僅在40MB/S左右,因此要達到幾百兆的帶寬就意味著要調用十幾台陣列,這樣就會佔用幾十個交換機埠,在只有一兩台交換機的中小型網路中,這是不可實現的.
(3)由於各種品牌,型號的磁碟陣列其性能不完全相同,如果出於虛擬化的目的將不同品牌,型號的陣列進行綁定,會帶來一個問題:即數據寫入或讀出時各並發數據流的速度不同,這就意味著原來的數據包順序在傳輸完畢後被打亂,系統需要佔用時間和資源去重新進行數據包排序整理,這會嚴重影響系統性能.
4 數據塊虛擬與虛擬文件系統
以上從拓撲結構角度分析了對稱式與非對稱式虛擬存儲方案的異同,實際從虛擬化存儲的實現原理來講也有兩種方式;即數據塊虛擬與虛擬文件系統.
數據塊虛擬存儲方案著重解決數據傳輸過程中的沖突和延時問題.在多交換機組成的大型Fabric結構的SAN中,由於多台主機通過多個交換機埠訪問存儲設備,延時和數據塊沖突問題非常嚴重.數據塊虛擬存儲方案利用虛擬的多埠並行技術,為多台客戶機提供了極高的帶寬,最大限度上減少了延時與沖突的發生,在實際應用中,數據塊虛擬存儲方案以對稱式拓撲結構為表現形式.
虛擬文件系統存儲方案著重解決大規模網路中文件共享的安全機制問題.通過對不同的站點指定不同的訪問許可權,保證網路文件的安全.在實際應用中,虛擬文件系統存儲方案以非對稱式拓撲結構為表現形式.
虛擬存儲技術和這門課的結合點
本學期的這門課中,所涉及的虛擬存儲技術,實際上是虛擬存儲技術的一個方面,特指以CPU時間和外存空間換取昂貴內存空間的操作系統中的資源轉換技術
基本思想:程序,數據,堆棧的大小可以超過內存的大小,操作系統把程序當前使用的部分保留在內存,而把其他部分保存在磁碟上,並在需要時在內存和磁碟之間動態交換,虛擬存儲器支持多道程序設計技術
目的:提高內存利用率
管理方式
A 請求式分頁存儲管理
在進程開始運行之前,不是裝入全部頁面,而是裝入一個或零個頁面,之後根據進程運行的需要,動態裝入其他頁面;當內存空間已滿,而又需要裝入新的頁面時,則根據某種演算法淘汰某個頁面,以便裝入新的頁面
B 請求式分段存儲管理
為了能實現虛擬存儲,段式邏輯地址空間中的程序段在運行時並不全部裝入內存,而是如同請求式分頁存儲管理,首先調入一個或若干個程序段運行,在運行過程中調用到哪段時,就根據該段長度在內存分配一個連續的分區給它使用.若內存中沒有足夠大的空閑分區,則考慮進行段的緊湊或將某段或某些段淘汰出去,這種存儲管理技術稱為請求式分段存儲管理
現在團IDC網上有45元/年美國空間的團購,便宜有口碑

6. 存儲過程

sql server存儲過程語法
存儲過程就是作為可執行對象存放在資料庫中的一個或多個SQL命令。
定義總是很抽象。存儲過程其實就是能完成一定操作的一組SQL語句,只不過這組語句是放在資料庫中的(這里我們只談SQL Server)。如果我們通過創建存儲過程以及在ASP中調用存儲過程,就可以避免將SQL語句同ASP代碼混雜在一起。這樣做的好處至少有三個:
第一、大大提高效率。存儲過程本身的執行速度非常快,而且,調用存儲過程可以大大減少同資料庫的交互次數。
第二、提高安全性。假如將SQL語句混合在ASP代碼中,一旦代碼失密,同時也就意味著庫結構失密。
第三、有利於SQL語句的重用。

在ASP中,一般通過command對象調用存儲過程,根據不同情況,本文也介紹其它調用方法。為了方便說明,根據存儲過程的輸入輸出,作以下簡單分類:
1. 只返回單一記錄集的存儲過程
假設有以下存儲過程(本文的目的不在於講述T-SQL語法,所以存儲過程只給出代碼,不作說明):

/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go

以上存儲過程取得userinfo表中的所有記錄,返回一個記錄集。通過command對象調用該存儲過程的ASP代碼如下:

'**通過Command對象調用存儲過程**
DIM MyComm,MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是資料庫連接字串
MyComm.CommandText = "getUserList" '指定存儲過程名
MyComm.CommandType = 4 '表明這是一個存儲過程
MyComm.Prepared = true '要求將SQL命令先行編譯
Set MyRst = MyComm.Execute
Set MyComm = Nothing

存儲過程取得的記錄集賦給MyRst,接下來,可以對MyRst進行操作。
在以上代碼中,CommandType屬性表明請求的類型,取值及說明如下:
-1 表明CommandText參數的類型無法確定

1 表明CommandText是一般的命令類型
2 表明CommandText參數是一個存在的表名稱
4 表明CommandText參數是一個存儲過程的名稱

還可以通過Connection對象或Recordset對象調用存儲過程,方法分別如下:

'**通過Connection對象調用存儲過程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.open MyConStr 'MyConStr是資料庫連接字串
Set MyRst = MyConn.Execute("getUserList",0,4) '最後一個參斷含義同CommandType
Set MyConn = Nothing

'**通過Recordset對象調用存儲過程**
DIM MyRst
Set MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1,4
'MyConStr是資料庫連接字串,最後一個參斷含義與CommandType相同

2. 沒有輸入輸出的存儲過程
請看以下存儲過程:

/*SP2*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
delete from dbo.[userinfo]
end
go

該存儲過程刪去userinfo表中的所有記錄,沒有任何輸入及輸出,調用方法與上面講過的基本相同,只是不用取得記錄集:

'**通過Command對象調用存儲過程**
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是資料庫連接字串
MyComm.CommandText = "delUserAll" '指定存儲過程名
MyComm.CommandType = 4 '表明這是一個存儲過程
MyComm.Prepared = true '要求將SQL命令先行編譯
MyComm.Execute '此處不必再取得記錄集

Set MyComm = Nothing

當然也可通過Connection對象或Recordset對象調用此類存儲過程,不過建立Recordset對象是為了取得記錄集,在沒有返回記錄集的情況下,還是利用Command對象吧。

3. 有返回值的存儲過程
在進行類似SP2的操作時,應充分利用SQL Server強大的事務處理功能,以維護數據的一致性。並且,我們可能需要存儲過程返回執行情況,為此,將SP2修改如下:

/*SP3*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
BEGIN TRANSACTION
delete from dbo.[userinfo]
IF @@error=0
begin
COMMIT TRANSACTION
return 1
end
ELSE
begin
ROLLBACK TRANSACTION
return 0
end
return
end
go

以上存儲過程,在delete順利執行時,返回1,否則返回0,並進行回滾操作。為了在ASP中取得返回值,需要利用Parameters集合來聲明參數:

'**調用帶有返回值的存儲過程並取得返回值**
DIM MyComm,MyPara
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是資料庫連接字串
MyComm.CommandText = "delUserAll" '指定存儲過程名
MyComm.CommandType = 4 '表明這是一個存儲過程
MyComm.Prepared = true '要求將SQL命令先行編譯
'聲明返回值
Set Mypara = MyComm.CreateParameter("RETURN",2,4)

MyComm.Parameters.Append MyPara
MyComm.Execute
'取得返回值
DIM retValue
retValue = MyComm(0) '或retValue = MyComm.Parameters(0)
Set MyComm = Nothing

在MyComm.CreateParameter("RETURN",2,4)中,各參數的含義如下:
第一個參數("RETURE")為參數名。參數名可以任意設定,但一般應與存儲過程中聲明的參數名相同。此處是返回值,我習慣上設為"RETURE";
第二個參數(2),表明該參數的數據類型,具體的類型代碼請參閱ADO參考,以下給出常用的類型代碼:
adBigInt: 20 ;
adBinary : 128 ;
adBoolean: 11 ;
adChar: 129 ;
adDBTimeStamp: 135 ;
adEmpty: 0 ;
adInteger: 3 ;
adSmallInt: 2 ;
adTinyInt: 16 ;
adVarChar: 200 ;
對於返回值,只能取整形,且-1到-99為保留值;
第三個參數(4),表明參數的性質,此處4表明這是一個返回值。此參數取值的說明如下:
0 : 類型無法確定; 1: 輸入參數;2: 輸入參數;3:輸入或輸出參數;4: 返回值

以上給出的ASP代碼,應該說是完整的代碼,也即最復雜的代碼,其實

Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara

可以簡化為

MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)

甚至還可以繼續簡化,稍後會做說明。
對於帶參數的存儲過程,只能使用Command對象調用(也有資料說可通過Connection對象或Recordset對象調用,但我沒有試成過)。

4. 有輸入參數和輸出參數的存儲過程
返回值其實是一種特殊的輸出參數。在大多數情況下,我們用到的是同時有輸入及輸出參數的存儲過程,比如我們想取得用戶信息表中,某ID用戶的用戶名,這時候,有一個輸入參數----用戶ID,和一個輸出參數----用戶名。實現這一功能的存儲過程如下:

/*SP4*/
CREATE PROCEDURE dbo.getUserName
@UserID int,
@UserName varchar(40) output
as
set nocount on
begin
if @UserID is null return
select @UserName=username
from dbo.[userinfo]
這樣可以么?

7. 存儲過程和函數的區別

一、含義不同

1、存儲過程:存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並作為一個單元處理。

2、函數:是由一個或多個 SQL 語句組成的子程序,可用於封裝代碼以便重新使用。函數限制比較多,如不能用臨時表,只能用表變數等

二、使用條件不同

1、存儲過程:可以在單個存儲過程中執行一系列 SQL 語句。而且可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。

2、函數:自定義函數諸多限制,有許多語句不能使用,許多功能不能實現。函數可以直接引用返回值,用表變數返回記錄集。但是,用戶定義函數不能用於執行一組修改全局資料庫狀態的操作。

三、執行方式不同

1、存儲過程:存儲過程可以返回參數,如記錄集,函數只能返回值或者表對象。存儲過程的參數有in,out,inout三種,存儲過程聲明時不需要返回類型。

2、函數:函數參數只有in,而函數需要描述返回類型,且函數中必須包含一個有效的return語句。

8. 存儲過程做無限級別分類刪除

這是前兩天給別人做過的一個例子:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tt]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tt]
GO

CREATE TABLE [dbo].[tt] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[pid] [int] NULL ,
[name] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[tt] ADD
CONSTRAINT [PK_tt] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
GO

CREATE PROCEDURE up_del
@id int
AS

declare @cnt int,@tmpid int
select @cnt=count(1) from tt where pid=@id
if(@cnt>0)
begin
declare ar_cursor cursor local for select id from tt where pid=@id
open ar_cursor
fetch next from ar_cursor into @tmpid
while @@fetch_status = 0
begin
---------------------------------------------------------------------------------------------------------------------------------
--調用存儲過程
exec up_del @tmpid
---------------------------------------------------------------------------------------------------------------------------------
fetch next from ar_cursor into @tmpid --這句一定要寫,否則麻煩大了. :) 死循環
end

close ar_cursor
deallocate ar_cursor

end

delete from tt where id=@id
GO

9. 存儲過程里,分類數據每個分類顯示 10 行, 用 group by 能實現嗎,怎麼實現,

好像不形吧,或者按分類多次查詢,存入到臨時表中,再進行取出。

10. 存儲過程的種類

1系統存儲過程
以sp_開頭,用來進行系統的各項設定.取得信息.相關管理工作。
2本地存儲過程
用戶創建的存儲過程是由用戶創建並完成某一特定功能的存儲過程,事實上一般所說的存儲過程就是指本地存儲過程。
3臨時存儲過程
分為兩種存儲過程:
一是本地臨時存儲過程,以井字型大小(#)作為其名稱的第一個字元,則該存儲過程將成為一個存放在tempdb資料庫中的本地臨時存儲過程,且只有創建它的用戶才能執行它;
二是全局臨時存儲過程,以兩個井字型大小(##)號開始,則該存儲過程將成為一個存儲在tempdb資料庫中的全局臨時存儲過程,全局臨時存儲過程一旦創建,以後連接到伺服器的任意用戶都可以執行它,而且不需要特定的許可權。
4遠程存儲過程
在SQL Server2005中,遠程存儲過程(Remote Stored Proceres)是位於遠程伺服器上的存儲過程,通常可以使用分布式查詢和EXECUTE命令執行一個遠程存儲過程。
5擴展存儲過程
擴展存儲過程(Extended Stored Proceres)是用戶可以使用外部程序語言編寫的存儲過程,而且擴展存儲過程的名稱通常以xp_開頭。

熱點內容
excel中編程 發布:2024-11-19 17:23:32 瀏覽:548
android透明圖片 發布:2024-11-19 17:01:50 瀏覽:162
iis上傳文件限制 發布:2024-11-19 16:37:55 瀏覽:406
面試題演算法 發布:2024-11-19 16:30:25 瀏覽:546
oracle存儲過程debug 發布:2024-11-19 16:30:25 瀏覽:233
linuxshjava 發布:2024-11-19 16:29:49 瀏覽:599
小程序saas平台源碼 發布:2024-11-19 16:27:16 瀏覽:838
汽車五門怎麼看配置 發布:2024-11-19 16:26:27 瀏覽:794
路由器密碼無線路由器怎麼設置 發布:2024-11-19 16:17:08 瀏覽:520
wifi直連android 發布:2024-11-19 15:59:58 瀏覽:939