㈠ .net(c#)還原sql server 2005資料庫,出錯因為資料庫正在使用,所以無法獲得對資料庫的獨占訪問權。
cmd.ExecuteNonQuery();
con.Close();
你是在它執行之後才釋放,當然會一樣的出現訪問無效,建議停止這個sqlserver的服務才去還原,如果你知道停止sqlserver進程的代碼也可以!
㈡ sqlserver資料庫select操作會造成鎖表嗎
鎖的類別有兩種分法:
從資料庫系統的角度來看鎖分為獨占鎖(即排它鎖),共享鎖和更新鎖
MS-SQL Server 使用以下資源鎖模式。
鎖模式 描述
共享 (S) 用於不更改或不更新數據的操作(只讀操作),如 SELECT 語句。
更新 (U) 用於可更新的資源中。防止當多個會話在讀取、鎖定以及隨後可能進行的資源更新時發生常見形式的死鎖。
排它 (X) 用於數據修改操作,例如 INSERT、UPDATE 或 DELETE。確保不會同時同一資源進行多重更新。
意向鎖 用於建立鎖的層次結構。意向鎖的類型為:意向共享 (IS)、意向排它 (IX) 以及與意向排它共享 (SIX)。
架構鎖 在執行依賴於表架構的操作時使用。架構鎖的類型為:架構修改 (Sch-M) 和架構穩定性 (Sch-S)。
大容量更新 (BU) 向表中大容量復制數據並指定了 TABLOCK 提示時使用。
共享鎖
共享 (S) 鎖允許並發事務讀取 (SELECT) 一個資源。資源上存在共享 (S) 鎖時,任何其它事務都不能修改數據。一旦已經讀取數據,便立即釋放資源上的共享 (S) 鎖,除非將事務隔離級別設置為可重復讀或更高級別,或者在事務生存周期內用鎖定提示保留共享 (S) 鎖。
㈢ sql server 怎麼保證查詢出的結果不能被其他電腦訪問,具體如下
這涉及到資料庫中,鎖的概念
首先,SQL Server更強調由系統來管理鎖。在用戶有SQL請求時,系統分析請求,自動在滿足鎖定條件和系統性能之間為資料庫加上適當的鎖,同時系統在運行期間常常自動進行優化處理,實行動態加鎖。也就是說,你的擔心是不必要的,SQLServer可以保證這種情況基本不會出現.如果特殊情況下,需要你手動出來,請參考下面文檔。
一. 為什麼要引入鎖
多個用戶同時對資料庫的並發操作時會帶來以下數據不一致的問題:
丟失更新
A,B兩個用戶讀同一數據並進行修改,其中一個用戶的修改結果破壞了另一個修改的結果,比如訂票系統
臟讀
A用戶修改了數據,隨後B用戶又讀出該數據,但A用戶因為某些原因取消了對數據的修改,數據恢復原值,此時B得到的數據就與資料庫內的數據產生了不一致
不可重復讀
A用戶讀取數據,隨後B用戶讀出該數據並修改,此時A用戶再讀取數據時發現前後兩次的值不一致
並發控制的主要方法是封鎖,鎖就是在一段時間內禁止用戶做某些操作以避免產生數據不一致
二 鎖的分類
鎖的類別有兩種分法:
1. 從資料庫系統的角度來看:分為獨占鎖(即排它鎖),共享鎖和更新鎖
MS-SQL Server 使用以下資源鎖模式。
鎖模式 描述
共享 (S) 用於不更改或不更新數據的操作(只讀操作),如 SELECT 語句。
更新 (U) 用於可更新的資源中。防止當多個會話在讀取、鎖定以及隨後可能進行的資源更新時發生常見形式的死鎖。
排它 (X) 用於數據修改操作,例如 INSERT、UPDATE 或 DELETE。確保不會同時同一資源進行多重更新。
意向鎖 用於建立鎖的層次結構。意向鎖的類型為:意向共享 (IS)、意向排它 (IX) 以及與意向排它共享 (SIX)。
架構鎖 在執行依賴於表架構的操作時使用。架構鎖的類型為:架構修改 (Sch-M) 和架構穩定性 (Sch-S)。
大容量更新 (BU) 向表中大容量復制數據並指定了 TABLOCK 提示時使用。
共享鎖
共享 (S) 鎖允許並發事務讀取 (SELECT) 一個資源。資源上存在共享 (S) 鎖時,任何其它事務都不能修改數據。一旦已經讀取數據,便立即釋放資源上的共享 (S) 鎖,除非將事務隔離級別設置為可重復讀或更高級別,或者在事務生存周期內用鎖定提示保留共享 (S) 鎖。
更新鎖
更新 (U) 鎖可以防止通常形式的死鎖。一般更新模式由一個事務組成,此事務讀取記錄,獲取資源(頁或行)的共享 (S) 鎖,然後修改行,此操作要求鎖轉換為排它 (X) 鎖。如果兩個事務獲得了資源上的共享模式鎖,然後試圖同時更新數據,則一個事務嘗試將鎖轉換為排它 (X) 鎖。共享模式到排它鎖的轉換必須等待一段時間,因為一個事務的排它鎖與其它事務的共享模式鎖不兼容;發生鎖等待。第二個事務試圖獲取排它 (X) 鎖以進行更新。由於兩個事務都要轉換為排它 (X) 鎖,並且每個事務都等待另一個事務釋放共享模式鎖,因此發生死鎖。
若要避免這種潛在的死鎖問題,請使用更新 (U) 鎖。一次只有一個事務可以獲得資源的更新 (U) 鎖。如果事務修改資源,則更新 (U) 鎖轉換為排它 (X) 鎖。否則,鎖轉換為共享鎖。
排它鎖
排它 (X) 鎖可以防止並發事務對資源進行訪問。其它事務不能讀取或修改排它 (X) 鎖鎖定的數據。
意向鎖
意向鎖表示 SQL Server 需要在層次結構中的某些底層資源上獲取共享 (S) 鎖或排它 (X) 鎖。例如,放置在表級的共享意向鎖表示事務打算在表中的頁或行上放置共享 (S) 鎖。在表級設置意向鎖可防止另一個事務隨後在包含那一頁的表上獲取排它 (X) 鎖。意向鎖可以提高性能,因為 SQL Server 僅在表級檢查意向鎖來確定事務是否可以安全地獲取該表上的鎖。而無須檢查表中的每行或每頁上的鎖以確定事務是否可以鎖定整個表。
意向鎖包括意向共享 (IS)、意向排它 (IX) 以及與意向排它共享 (SIX)。
鎖模式 描述
意向共享 (IS) 通過在各資源上放置 S 鎖,表明事務的意向是讀取層次結構中的部分(而不是全部)底層資源。
意向排它 (IX) 通過在各資源上放置 X 鎖,表明事務的意向是修改層次結構中的部分(而不是全部)底層資源。IX 是 IS 的超集。
與意向排它共享 (SIX) 通過在各資源上放置 IX 鎖,表明事務的意向是讀取層次結構中的全部底層資源並修改部分(而不是全部)底層資源。允許頂層資源上的並發 IS 鎖。例如,表的 SIX 鎖在表上放置一個 SIX 鎖(允許並發 IS 鎖),在當前所修改頁上放置 IX 鎖(在已修改行上放置 X 鎖)。雖然每個資源在一段時間內只能有一個 SIX 鎖,以防止其它事務對資源進行更新,但是其它事務可以通過獲取表級的 IS 鎖來讀取層次結構中的底層資源。
獨占鎖:只允許進行鎖定操作的程序使用,其他任何對他的操作均不會被接受。執行數據更新命令時,SQL Server會自動使用獨占鎖。當對象上有其他鎖存在時,無法對其加獨占鎖。
共享鎖:共享鎖鎖定的資源可以被其他用戶讀取,但其他用戶無法修改它,在執行Select時,SQL Server會對對象加共享鎖。
更新鎖:當SQL Server准備更新數據時,它首先對數據對象作更新鎖鎖定,這樣數據將不能被修改,但可以讀取。等到SQL Server確定要進行更新數據操作時,他會自動將更新鎖換為獨占鎖,當對象上有其他鎖存在時,無法對其加更新鎖。
2. 從程序員的角度看:分為樂觀鎖和悲觀鎖。
樂觀鎖:完全依靠資料庫來管理鎖的工作。
悲觀鎖:程序員自己管理數據或對象上的鎖處理。
MS-SQLSERVER 使用鎖在多個同時在資料庫內執行修改的用戶間實現悲觀並發控制
三 鎖的粒度
鎖粒度是被封鎖目標的大小,封鎖粒度小則並發性高,但開銷大,封鎖粒度大則並發性低但開銷小
SQL Server支持的鎖粒度可以分為為行、頁、鍵、鍵范圍、索引、表或資料庫獲取鎖
資源 描述
RID 行標識符。用於單獨鎖定表中的一行。
鍵 索引中的行鎖。用於保護可串列事務中的鍵范圍。
頁 8 千位元組 (KB) 的數據頁或索引頁。
擴展盤區 相鄰的八個數據頁或索引頁構成的一組。
表 包括所有數據和索引在內的整個表。
DB 資料庫。
四 鎖定時間的長短
鎖保持的時間長度為保護所請求級別上的資源所需的時間長度。
用於保護讀取操作的共享鎖的保持時間取決於事務隔離級別。採用 READ COMMITTED 的默認事務隔離級別時,只在讀取頁的期間內控制共享鎖。在掃描中,直到在掃描內的下一頁上獲取鎖時才釋放鎖。如果指定 HOLDLOCK 提示或者將事務隔離級別設置為 REPEATABLE READ 或 SERIALIZABLE,則直到事務結束才釋放鎖。
根據為游標設置的並發選項,游標可以獲取共享模式的滾動鎖以保護提取。當需要滾動鎖時,直到下一次提取或關閉游標(以先發生者為准)時才釋放滾動鎖。但是,如果指定 HOLDLOCK,則直到事務結束才釋放滾動鎖。
用於保護更新的排它鎖將直到事務結束才釋放。
如果一個連接試圖獲取一個鎖,而該鎖與另一個連接所控制的鎖沖突,則試圖獲取鎖的連接將一直阻塞到:
將沖突鎖釋放而且連接獲取了所請求的鎖。
連接的超時間隔已到期。默認情況下沒有超時間隔,但是一些應用程序設置超時間隔以防止無限期等待
五 SQL Server 中鎖的自定義
1 處理死鎖和設置死鎖優先順序
死鎖就是多個用戶申請不同封鎖,由於申請者均擁有一部分封鎖權而又等待其他用戶擁有的部分封鎖而引起的無休止的等待
可以使用SET DEADLOCK_PRIORITY控制在發生死鎖情況時會話的反應方式。如果兩個進程都鎖定數據,並且直到其它進程釋放自己的鎖時,每個進程才能釋放自己的鎖,即發生死鎖情況。
2 處理超時和設置鎖超時持續時間。
@@LOCK_TIMEOUT 返回當前會話的當前鎖超時設置,單位為毫秒
SET LOCK_TIMEOUT 設置允許應用程序設置語句等待阻塞資源的最長時間。當語句等待的時間大於 LOCK_TIMEOUT 設置時,系統將自動取消阻塞的語句,並給應用程序返回"已超過了鎖請求超時時段"的 1222 號錯誤信息
示例
下例將鎖超時期限設置為 1,800 毫秒。
SET LOCK_TIMEOUT 1800
3) 設置事務隔離級別。
4 ) 對 SELECT、INSERT、UPDATE 和 DELETE 語句使用表級鎖定提示。
5) 配置索引的鎖定粒度
可以使用 sp_indexoption 系統存儲過程來設置用於索引的鎖定粒度
六 查看鎖的信息
1 執行 EXEC SP_LOCK 報告有關鎖的信息
2 查詢分析器中按Ctrl+2可以看到鎖的信息
七 使用注意事項
如何避免死鎖
1 使用事務時,盡量縮短事務的邏輯處理過程,及早提交或回滾事務;
2 設置死鎖超時參數為合理范圍,如:3分鍾-10分種;超過時間,自動放棄本次操作,避免進程懸掛;
3 優化程序,檢查並避免死鎖現象出現;
4 .對所有的腳本和SP都要仔細測試,在正是版本之前。
5 所有的SP都要有錯誤處理(通過@error)
6 一般不要修改SQL SERVER事務的默認級別。不推薦強行加鎖
解決問題 如何對行 表 資料庫加鎖
八 幾個有關鎖的問題
1 如何鎖一個表的某一行
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT * FROM table ROWLOCK WHERE id = 1
2 鎖定資料庫的一個表
SELECT * FROM table WITH (HOLDLOCK)
加鎖語句:
sybase:
update 表 set col1=col1 where 1=0 ;
MSSQL:
select col1 from 表 (tablockx) where 1=0 ;
oracle:
LOCK TABLE 表 IN EXCLUSIVE MODE ;
加鎖後其它人不可操作,直到加鎖用戶解鎖,用commit或rollback解鎖
幾個例子幫助大家加深印象
設table1(A,B,C)
A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3
1)排它鎖
新建兩個連接
在第一個連接中執行以下語句
begin tran
update table1
set A='aa'
where B='b2'
waitfor delay '00:00:30' --等待30秒
commit tran
在第二個連接中執行以下語句
begin tran
select * from table1
where B='b2'
commit tran
若同時執行上述兩個語句,則select查詢必須等待update執行完畢才能執行即要等待30秒
2)共享鎖
在第一個連接中執行以下語句
begin tran
select * from table1 holdlock -holdlock人為加鎖
where B='b2'
waitfor delay '00:00:30' --等待30秒
commit tran
在第二個連接中執行以下語句
begin tran
select A,C from table1
where B='b2'
update table1
set A='aa'
where B='b2'
commit tran
若同時執行上述兩個語句,則第二個連接中的select查詢可以執行
而update必須等待第一個事務釋放共享鎖轉為排它鎖後才能執行 即要等待30秒
3)死鎖
增設table2(D,E)
D E
d1 e1
d2 e2
在第一個連接中執行以下語句
begin tran
update table1
set A='aa'
where B='b2'
waitfor delay '00:00:30'
update table2
set D='d5'
where E='e1'
commit tran
在第二個連接中執行以下語句
begin tran
update table2
set D='d5'
where E='e1'
waitfor delay '00:00:10'
update table1
set A='aa'
where B='b2'
commit tran
同時執行,系統會檢測出死鎖,並中止進程
補充一點:
Sql Server2000支持的表級鎖定提示
HOLDLOCK 持有共享鎖,直到整個事務完成,應該在被鎖對象不需要時立即釋放,等於SERIALIZABLE事務隔離級別
NOLOCK 語句執行時不發出共享鎖,允許臟讀 ,等於 READ UNCOMMITTED事務隔離級別
PAGLOCK 在使用一個表鎖的地方用多個頁鎖
READPAST 讓sql server跳過任何鎖定行,執行事務,適用於READ UNCOMMITTED事務隔離級別只跳過RID鎖,不跳過頁,區域和表鎖
ROWLOCK 強制使用行鎖
TABLOCKX 強制使用獨占表級鎖,這個鎖在事務期間阻止任何其他事務使用這個表
UPLOCK 強制在讀表時使用更新而不用共享鎖
應用程序鎖:
應用程序鎖就是客戶端代碼生成的鎖,而不是sql server本身生成的鎖
處理應用程序鎖的兩個過程
sp_getapplock 鎖定應用程序資源
sp_releaseapplock 為應用程序資源解鎖
注意: 鎖定資料庫的一個表的區別
SELECT * FROM table WITH (HOLDLOCK) 其他事務可以讀取表,但不能更新刪除
SELECT * FROM table WITH (TABLOCKX) 其他事務不能讀取表,更新和刪除
㈣ 求助,sqlserver什麼情況下會鎖表
鎖的類別有兩種分法:
從資料庫系統的角度來看鎖分為獨占鎖(即排它鎖),共享鎖和更新鎖
MS-SQL Server 使用以下資源鎖模式。
鎖模式 描述
共享 (S) 用於不更改或不更新數據的操作(只讀操作),如 SELECT 語句。
更新 (U) 用於可更新的資源中。防止當多個會話在讀取、鎖定以及隨後可能進行的資源更新時發生常見形式的死鎖。
㈤ 如何強制刪除或恢復SQLServer正在使用的資料庫
在SSMS中如果想強制刪除或者恢復資料庫,你必須獲得資料庫的獨占訪問權;而獨占的話你可以把資料庫更改為單用戶模式,這樣後續你就可以自己恢復或者刪除了。
ALTERDATABASEyourDBSETSINGLE_USERWITHROLLBACKIMMEDIATE
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
將資料庫設置為單用戶,並且立即斷開所有其他鏈接,未完成的事務全部回滾。
㈥ 如何配置ci框架連接sqlserver
一、啟用FileTable
1、修改資料庫引擎的屬性
打開「SQL Server配置管理器」,修改SQL Server資料庫引擎的屬性。使用此頁可針對此 Microsoft SQL Server 2012安裝啟用 FILESTREAM。
(1)針對 Transact-SQL 訪問啟用 FILESTREAM
選中此項可針對 Transact-SQL 訪問啟用 FILESTREAM。 必須選中此控制選項,才能使用其他控制選項。如果不啟用此選項,就不能添加FileStream文件組。
(2)針對文件 I/O 流訪問啟用 FILESTREAM
選中此項可針對 FILESTREAM 啟用 Win32 流訪問。
(3)Windows 共享名
使用此控制選項可輸入將用來存儲 FILESTREAM 數據的 Windows 共享的名稱。默認為該SQL Server實例的名稱。
(4)允許遠程客戶端針對 FILESTREAM 數據啟用流訪問
選中此控制選項可允許遠程客戶端訪問此伺服器上的此 FILESTREAM 數據。
2、修改伺服器的屬性
打開「SQL Server Management Studio」,修改該實例的配置。默認配置如下:
上述選項解釋如下:
(1)「FILESTREAM 訪問級別」顯示 SQL Server 實例上支持的 FILESTREAM 的當前級別。若要更改訪問級別,請選擇以下值之一:
已禁用
無法將二進制大型對象 (BLOB) 數據存儲在文件系統中。此為默認值。即filestream access level=0
已啟用 Transact-SQL 訪問
可使用 Transact-SQL 訪問 FILESTREAM 數據,但不能通過文件系統進行訪問。即filestream access level=1
已啟用完全訪問
FILESTREAM 數據可使用 Transact-SQL 以及通過文件系統進行訪問。即filestream access level=0
注意:在首次啟用 FILESTREAM 時,您可能需要重新啟動計算機才能配置驅動程序。
(2)「FILESTREAM 共享名稱」顯示在安裝過程中選擇的 FILESTREAM 共享的只讀名稱。
在本次實驗中,我們將「FILESTREAM 訪問級別」 設定為:已啟用完全訪問。
如果是通過T-SQL腳本執行,則運行以下腳本:
EXEC sys.sp_configure N'filestream access level', N'2'
RECONFIGURE WITH OVERRIDE
注意:設置完成之後,重啟實例。
3、配置防火牆
若要在防火牆保護的環境中使用 FILESTREAM,客戶端和伺服器都必須能夠將 DNS 名稱解析為包含 FILESTREAM 文件的伺服器。FILESTREAM 要求 Windows 文件共享埠 139 和 445 處於打開狀態。
二、配置文件組
1、添加文件組
完成上述操作之後,就可以為該資料庫添加專用於FileStream的文件組。
如果是通過腳本操作,請運行以下腳本:
ALTER DATABASE [db01] ADD FILEGROUP [FileStreamFileGroup] CONTAINS FILESTREAM
2、添加文件
完成上述操作之後,就可以為該資料庫添加FilStream類型的資料庫文件。
在本例中,系統並沒有為「FileStream數據」的文件類型創建mdf或ndf文件,而是在文件夾C:\SqlData下面自動創建以邏輯名稱命名的文件夾,即 C:\SqlData\FileData。其中filestream.hdr 文件是 FILESTREAM 容器的頭文件。當這個資料庫被刪除時,mdf、ndf、log連同這個文件夾都會被刪除。
如果是通過腳本操作,請運行以下腳本:
ALTER DATABASE [db01] ADD FILE ( NAME = N'FileData', FILENAME = N'C:\SqlData\FileData' ) TO FILEGROUP [FileStreamFileGroup]
注意:在上例中,在運行腳本之前,必須存在C:\SqlData,建議使用右側的選擇按鈕選擇路徑。如果路徑不存在,就會報錯:
同時不能存在重復的文件夾,即不能存在C:\SqlData\FileData。否則也會報錯:
3、啟動非事務訪問
FileTable 使 Windows 應用程序可以獲取 FILESTREAM 數據的 Windows 文件句柄而不需要 SQL Server 事務。為了允許對 SQL Server 中存儲的文件進行此非事務性訪問,必須為要包含 FileTable 的每個資料庫在資料庫級別上指定所需的非事務性訪問級別。
選項解釋如下:
(1)FILESTREAM 非事務訪問
為從文件系統到 FileTables 中存儲的 FILESTREAM 數據的非事務性訪問指定以下選項之一:OFF、READ_ONLY 或 FULL。
如果在伺服器上未啟用 FILESTREAM,則該值將設置為 OFF 並且被禁用。在本次實驗中,將其設置為FULL。
(2)FILESTREAM 目錄名稱
為與所選資料庫相關聯的 FILESTREAM 數據指定目錄名稱。在 FileTable 文件夾層次結構中,此資料庫級目錄將成為在實例級別為 FILESTREAM 指定的共享名稱的子級以及在資料庫中創建的 FileTable 的父級。
如果啟用非事務性訪問時沒有提供目錄名稱,則在以後必須提供它,這樣才能在資料庫中創建 FileTable。
如果是通過腳本執行,如下:
ALTER DATABASE db01
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'ImageFiles' )
注意:更改現有資料庫時,調用帶 DIRECTORY_NAME FILESTREAM 選項的 ALTER DATABASE (Transact-SQL) 語句。使用這些選項更改目錄名稱時,資料庫必須以獨占方式鎖定,沒有打開的文件句柄。
說明:為檢查是否在資料庫上啟用了非事務性訪問,可以查詢目錄視圖,腳本如下:
SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
FROM sys.database_filestream_options
三、創建FileTable
1、創建第一個FileTable
「SQL Server Management Studio」只提供一個腳本模板,要想創建FileTable還是得用腳本完成:
USE db01
CREATE TABLE ImageTable1 AS FILETABLE
官方的範本為:
USE [db01]
CREATE TABLE [dbo].[ImageTable1] AS FILETABLE ON [PRIMARY] FILESTREAM_ON [FileStreamFileGroup]
WITH
(FILETABLE_DIRECTORY = N'ImageTable1', FILETABLE_COLLATE_FILENAME = Chinese_PRC_CI_AS)
2、創建第二個FileTable
CREATE TABLE ImageTable2 AS FILETABLE
3、獲取共享路徑
文件表創建之後,就會相應的產生一個文件表共享目錄,該目錄路徑可以通過內建函數獲取:
SELECT FileTableRootPath('ImageTable1')
本次實驗所返回的結果為:\\SQL1\SqlFile\ImageFiles\ImageTable1
4、查看
通過Windows資源管理器,可見已經創建了以GUID命名的文件夾。
通過SQL Server Management Studio,查看錶的結構。
四、操作
1、向文件夾中添加文件
通過 「Windows資源管理器」,向文件夾\\SQL1\SqlFile\ImageFiles\ImageTable1中添加一個文件A01.GIF。然後運行腳本:
select * from ImageTable1
結果如下:
可見, SQL Server自動在Table中添加了記錄。
2、文件改名
運行以下腳本:
update ImageTable1 set name='Cup.GIF' where name='A01.GIF'
通過「Windows資源管理器」,查看文件夾\\SQL1\SqlFile\ImageFiles\ImageTable1,可見文件A01.GIF已經被改名為Cup.GIF 。
3、查看共享文件夾
我們可以繼續復制其他文件,然後通過「Windows資源管理器」,查看文件夾。
4、刪除文件
可以使用腳本刪除,例如:
Delete ImageTable1 where name='Cup.GIF'
或者,通過「Windows資源管理器」直接刪除該文件。
五、備份和還原
1、備份資料庫
使用 SQL Server 備份資料庫時,FILESTREAM 數據將與資料庫中的結構化數據一起備份。
2、部分備份
如果不想將 FILESTREAM 數據與關系數據一起備份,則可以使用部分備份將 FILESTREAM 文件組排除在外。
㈦ Oracle資料庫和Sql server資料庫各有什麼優缺點
1.Oracle跨平台,SQL
Server只能運行在Windows上,而Windows能夠安裝的硬體是有限的,如Sun的Sparc伺服器不能安裝Windows,一些大型機、小型機也只能裝UNIX,在這些高端機器上就只能跑Oracle了,這註定了Oracle就是高端資料庫,而SQL
Server呢,中低端。
2.Oracle真正實現了行級鎖,SQL
Server也宣稱實現了行級鎖,但你實際去試,如果不加索引,其實是不行的。
3.Oracle因為有多版本數據的技術,讀寫操作不會相互等待,雖然SQL
Server
2005學習Oracle增加了snapshot機制,從而也引進了多版本數據(MySQL也有多版本數據機制,不能說一定是學習Oracle),但是實際效果感覺就是2個版本的數據,隔離級別為read
committed時候,讀寫不再相互等待,但是把隔離設置為Serializable還是會產生讀寫相互等待。
4.Oracle的事務日誌歸檔相當方便,而SQL
Server要用事務日誌備份來實現,而且還要配置自動作業,啟動agent服務。
5.Oracle的數據字典豐富,使得DBA容易判斷資料庫的各種情況,雖然SQL
Server
2005學習了Oracle的數據字典的特點,但從數量及方便程度上還是相差太多。個人感覺這是Oracle最人性化的地方。
6.Oracle的PL/SQL比SQL
Server的T-SQL功能強大很多。
7.Oracle的觸發器比SQL
Server的種類多幾種。
8.oracle的備份恢復原理相當簡單明了,備份就在操作系統上拷貝數據文件好了,恢復呢,再拷貝回來,數據是舊的,不怕,應用重做日誌好了。SQLServer呢,雖然原理在本質上還是這些,但操作起來麻煩多了,麻煩到讓你體會不到其本質。
9.Oracle資料庫啟動可以有多個階段,使得DBA可以在不同的情況下,通過啟動到特定的階段解決一些特殊問題,而SQLServer只要服務一啟動,所有資料庫就都打開了。
10.SQLServer給人的感覺是簡單易用,但是我要說,如果你繼續向前走,就會發現SQLServer的體系結構相當復雜(注意我這里是說的復雜),大體還是沿襲的Sybase的體系結構,這種復雜結構,估計很難有根本性的改變,而Oracle呢,時間越長你越會覺得其體系結構嚴謹,雖然開始會感覺很難。我的一個比喻,SQLServer是傻瓜相機(就是那些一兩千的小數碼),Oracle是單反相機(40D,5D,D300),如果你是入門者,那用傻瓜相機好了,在各種環境下拍攝,基本都過得去,用單反,光圈、快門都要自己設定,反倒不如傻瓜相機的效果,如果你是高手了,那傻瓜相機就很難得心應手了。
11.Oracle的書籍一般都比較深,隨便一說就是一大批,EpertOracle、PracticalOracle8i、Cost-basedOracle,SQLServer呢,恐怕只有那套InsideSQLServer了,雖然SQLServer的書籍數量比Oracle的多的多(特別是在國內),但多數都是stepbystep的入門書。
12.對比SQL*Plus與sqlcmd(或2000的osql,6.5的isql),sqlcmd的功能是太簡陋,差得太多了。
13.SQLServer的最大優點就是和Windows結合緊密,易用,但是要注意事情都是兩面的,這些優點可能導致其致命的缺點,例如易用,使得搞SQLServer的人可以不求甚解,有時候不求甚解是沒問題的,但是有時候不求甚解可能會造成災難,特別是對搞資料庫的人來說。不好意思,本來要說SQLServer的優點呢,最後也成了缺點了。
㈧ 如何使用Sqlserver 2012 Always on技術
一、啟用FileTable1、修改資料庫引擎的屬性打開「SQLServer配置管理器」,修改SQLServer資料庫引擎的屬性。使用此頁可針對此MicrosoftSQLServer2012安裝啟用FILESTREAM。(1)針對Transact-SQL訪問啟用FILESTREAM選中此項可針對Transact-SQL訪問啟用FILESTREAM。必須選中此控制選項,才能使用其他控制選項。如果不啟用此選項,就不能添加FileStream文件組。(2)針對文件I/O流訪問啟用FILESTREAM選中此項可針對FILESTREAM啟用Win32流訪問。(3)Windows共享名使用此控制選項可輸入將用來存儲FILESTREAM數據的Windows共享的名稱。默認為該SQLServer實例的名稱。(4)允許遠程客戶端針對FILESTREAM數據啟用流訪問選中此控制選項可允許遠程客戶端訪問此伺服器上的此FILESTREAM數據。2、修改伺服器的屬性打開「SQLServerManagementStudio」,修改該實例的配置。默認配置如下:上述選項解釋如下:(1)「FILESTREAM訪問級別」顯示SQLServer實例上支持的FILESTREAM的當前級別。若要更改訪問級別,請選擇以下值之一:已禁用無法將二進制大型對象(BLOB)數據存儲在文件系統中。此為默認值。即filestreamaccesslevel=0已啟用Transact-SQL訪問可使用Transact-SQL訪問FILESTREAM數據,但不能通過文件系統進行訪問。即filestreamaccesslevel=1已啟用完全訪問FILESTREAM數據可使用Transact-SQL以及通過文件系統進行訪問。即filestreamaccesslevel=0注意:在首次啟用FILESTREAM時,您可能需要重新啟動計算機才能配置驅動程序。(2)「FILESTREAM共享名稱」顯示在安裝過程中選擇的FILESTREAM共享的只讀名稱。在本次實驗中,我們將「FILESTREAM訪問級別」設定為:已啟用完全訪問。如果是通過T-SQL腳本執行,則運行以下腳本:EXECsys.sp_configureN'filestreamaccesslevel',N'2'RECONFIGUREWITHOVERRIDE注意:設置完成之後,重啟實例。3、配置防火牆若要在防火牆保護的環境中使用FILESTREAM,客戶端和伺服器都必須能夠將DNS名稱解析為包含FILESTREAM文件的伺服器。FILESTREAM要求Windows文件共享埠139和445處於打開狀態。二、配置文件組1、添加文件組完成上述操作之後,就可以為該資料庫添加專用於FileStream的文件組。如果是通過腳本操作,請運行以下腳本:ALTERDATABASE[db01]ADDFILEGROUP[FileStreamFileGroup]CONTAINSFILESTREAM2、添加文件完成上述操作之後,就可以為該資料庫添加FilStream類型的資料庫文件。在本例中,系統並沒有為「FileStream數據」的文件類型創建mdf或ndf文件,而是在文件夾C:\SqlData下面自動創建以邏輯名稱命名的文件夾,即C:\SqlData\FileData。其中filestream.hdr文件是FILESTREAM容器的頭文件。當這個資料庫被刪除時,mdf、ndf、log連同這個文件夾都會被刪除。如果是通過腳本操作,請運行以下腳本:ALTERDATABASE[db01]ADDFILE(NAME=N'FileData',FILENAME=N'C:\SqlData\FileData')TOFILEGROUP[FileStreamFileGroup]注意:在上例中,在運行腳本之前,必須存在C:\SqlData,建議使用右側的選擇按鈕選擇路徑。如果路徑不存在,就會報錯:同時不能存在重復的文件夾,即不能存在C:\SqlData\FileData。否則也會報錯:3、啟動非事務訪問FileTable使Windows應用程序可以獲取FILESTREAM數據的Windows文件句柄而不需要SQLServer事務。為了允許對SQLServer中存儲的文件進行此非事務性訪問,必須為要包含FileTable的每個資料庫在資料庫級別上指定所需的非事務性訪問級別。選項解釋如下:(1)FILESTREAM非事務訪問為從文件系統到FileTables中存儲的FILESTREAM數據的非事務性訪問指定以下選項之一:OFF、READ_ONLY或FULL。如果在伺服器上未啟用FILESTREAM,則該值將設置為OFF並且被禁用。在本次實驗中,將其設置為FULL。(2)FILESTREAM目錄名稱為與所選資料庫相關聯的FILESTREAM數據指定目錄名稱。在FileTable文件夾層次結構中,此資料庫級目錄將成為在實例級別為FILESTREAM指定的共享名稱的子級以及在資料庫中創建的FileTable的父級。如果啟用非事務性訪問時沒有提供目錄名稱,則在以後必須提供它,這樣才能在資料庫中創建FileTable。如果是通過腳本執行,如下:(NON_TRANSACTED_ACCESS=FULL,DIRECTORY_NAME=N'ImageFiles')注意:更改現有資料庫時,調用帶DIRECTORY_NAMEFILESTREAM選項的ALTERDATABASE(Transact-SQL)語句。使用這些選項更改目錄名稱時,資料庫必須以獨占方式鎖定,沒有打開的文件句柄。說明:為檢查是否在資料庫上啟用了非事務性訪問,可以查詢目錄視圖,腳本如下:SELECTDB_NAME(database_id),non_transacted_access,non_transacted_access_descFROMsys.database_filestream_options三、創建FileTable1、創建第一個FileTable「SQLServerManagementStudio」只提供一個腳本模板,要想創建FileTable還是得用腳本完成:官方的範本為:USE[db01]CREATETABLE[dbo].[ImageTable1]ASFILETABLEON[PRIMARY]FILESTREAM_ON[FileStreamFileGroup]WITH(FILETABLE_DIRECTORY=N'ImageTable1',FILETABLE_COLLATE_FILENAME=Chinese_PRC_CI_AS)2、創建第二個、獲取共享路徑文件表創建之後,就會相應的產生一個文件表共享目錄,該目錄路徑可以通過內建函數獲取:SELECTFileTableRootPath('ImageTable1')本次實驗所返回的結果為:\\SQL1\SqlFile\ImageFiles\ImageTable14、查看通過Windows資源管理器,可見已經創建了以GUID命名的文件夾。通過SQLServerManagementStudio,查看錶的結構。四、操作1、向文件夾中添加文件通過「Windows資源管理器」,向文件夾\\SQL1\SqlFile\ImageFiles\ImageTable1中添加一個文件A01.GIF。然後運行腳本:select*fromImageTable1結果如下:可見,SQLServer自動在Table中添加了記錄。2、文件改名運行以下腳本:updateImageTable1setname='Cup.GIF'wherename='A01.GIF'通過「Windows資源管理器」,查看文件夾\\SQL1\SqlFile\ImageFiles\ImageTable1,可見文件A01.GIF已經被改名為Cup.GIF。3、查看共享文件夾我們可以繼續復制其他文件,然後通過「Windows資源管理器」,查看文件夾。4、刪除文件可以使用腳本刪除,例如:DeleteImageTable1wherename='Cup.GIF'或者,通過「Windows資源管理器」直接刪除該文件。五、備份和還原1、備份資料庫使用SQLServer備份資料庫時,FILESTREAM數據將與資料庫中的結構化數據一起備份。2、部分備份如果不想將FILESTREAM數據與關系數據一起備份,則可以使用部分備份將FILESTREAM文件組排除在外。六、相關說明詳見/zh-cn/library/gg492086.aspx1、AlwaysOn在包含FILESTREAM或FileTable數據的資料庫屬於某一AlwaysOn可用性組時:FILESTREAM和FileTable函數接受或返回虛擬網路名稱(VNN),而非計算機名稱。有關這些函數的詳細信息,請參閱Filestream和FileTable函數(Transact-SQL)。通過文件系統API對FILESTREAM或FileTable數據進行的所有訪問都應該使用VNN,而非計算機名稱。2、表分區FileTable不支持分區。通過對多個FILESTREAM文件組的支持,在大多數方案中可以解決純向上擴展問題,而不必使用分區(不像SQL2008FILESTREAM)。3、復制FileTable不支持復制和相關功能(包括事務性復制、合並復制、更改數據捕獲和更改跟蹤)。4、視圖可以像為任何其他表一樣為FileTable創建視圖。但是對於為FileTable創建的視圖有以下注意事項:視圖將不具有任何FileTable語義,也就是說,視圖中的列(包括「文件屬性」列)的行為與常規視圖列一樣,不具有任何特殊語義,對於表示文件/目錄的行也是如此。可以基於「可更新視圖」語義更新視圖,但是基礎表約束可能拒絕更新,就像在表中一樣。可以通過將文件的路徑添加為視圖中的顯式列,在視圖中顯示該路徑。例如:,column2,…,GetFileNamespacePath()ASPATH,column3,…FROMDocuments
㈨ 我的MS SqlServer佔用系統資源特別大
WinXP中CPU佔用100%原因及解決方法 我們在使用Windows XP操作系統的時候,用著用著系統就變慢了,一看「 任務管理器 」才發現CPU佔用達到100%。這是怎麼回事情呢?遇到病毒了,硬體有問題,還是系統設置有問題,在本文中筆者將從硬體,軟體和病毒三個方面來講解系統資源佔用率為什麼會達到100%。 經常出現CPU佔用100%的情況,主要問題可能發生在下面的某些方面: CPU佔用率高 的九種可能 1、防殺毒軟體造成 故障 由於新版的 KV 、金山、 瑞星 都加入了對網頁、 插件 、郵件的隨機監控,無疑增大了系統負擔。處理方式:基本上沒有合理的處理方式,盡量使用最少的監控服務吧,或者,升級你的硬體配備。 2、驅動沒有經過認證,造成CPU資源佔用100% 大量的測試版的驅動在網上泛濫,造成了難以發現的故障原因。 處理方式:尤其是 顯卡驅動 特別要注意,建議使用 微軟認證 的或由官方發布的驅動,並且嚴格核對型號、版本。 3、 病毒、木馬 造成 大量的蠕蟲病毒在系統內部迅速復制,造成CPU佔用資源率據高不下。解決辦法:用可靠的殺毒軟體徹底清理系統內存和本地硬碟,並且打開系統設置軟體,察看有無異常啟動的程序。經常性更新升級殺毒軟體和防火牆,加強防毒意識,掌握正確的防殺毒知識。 4、控制面板— 管理工具 —服務—RISING REALTIME MONITOR SERVICE 點滑鼠右鍵,改為手動。 5、開始->運行->msconfig->啟動,關閉不必要的啟動項,重啟。 6、查看「 svchost 」進程。 svchost . exe 是Windows XP系統 的一個核心進程。 svchost.exe 不單單只出現 在Window s XP中,在使用 NT 內核的 Windows系統 中都會有svchost.exe的存在。一般在 Windows 2000 中 svchost.exe進程 的數目為2個,而 在Windows XP中svchost.exe進程的數目就上升到了4個及4個以上。 7、查看 網路連接 。主要是網卡。 8、查看網路連接 當安裝了Windows XP的計算機做伺服器的時候,收到埠 445 上的連接請求時,它將分配內存和少量地調配 CPU資源來為這些連接提供服務。當負荷過重的時候,CPU佔用率可能過高,這是因為在工作項的數目和響應能力之間存在固有的權衡關系。你要確定合適的 MaxWorkItems 設置以提高系統響應能力。如果設置的值不正確,伺服器的響應能力可能會受到影響,或者某個用戶獨占太 多系統 資源。 要解決此問題,我們可以通過修改注冊表來解決:在 注冊表編輯器 中依次展開[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver ]分支,在右側窗口中 新建 一個名為「maxworkitems」的 DWORD值 。然後雙擊該值,在打開的窗口中鍵入下列數值並保存退出: 如果計算機有512MB以上的內存,鍵入「1024」;如果計算機內存小於 512 MB,鍵入「256」。 9、看看是不是Windows XP使用滑鼠右鍵引起CPU佔用100% 前不久的報到說在資源管理器裡面使用滑鼠右鍵會導致CPU資源100%佔用,我們來看看是怎麼回事? 徵兆: 在資源管理器裡面,當你右鍵點擊一個目錄或一個文件,你將有可能出現下面所列問題: 任何文件的拷貝操作在那個時間將有可能停止相應 網路連接速度將顯著性的降低 所有的流輸入/輸出操作例如使用Windows Media Player 聽音樂將有可能是音樂失真成因: 當你在資源管理器裡面右鍵點擊一個文件或目錄的時候,當快捷 菜單顯示 的時候,CPU佔用率將增加到100%,當你關閉快捷菜單的時候才返回正常水平。 解決方法: 方法一:關閉「為菜單和工具提示使用過渡效果」 1、點擊「開始」--「控制面板」 2、在「控制面板」裡面雙擊「顯示」 3、在「顯示」屬性裡面點擊「外觀」標簽頁 4、在「外觀」標簽頁裡面點擊「效果」 5、在「效果」對話框裡面,清除「為菜單和工具提示使用過渡效果」前
㈩ sqlserver資料庫連接
使用Startup命令。
STARTUP參數說明:
1.不裝入資料庫而啟動實例,一般是在資料庫才創建時才可以這樣做:
STARTUP NOMOUNT
2.啟動實例並裝入資料庫 但不打開資料庫,允許用戶執行特定的維護操作。例如:
重命名數據文件;
添加、撤消或重命名重做日誌文件;
啟動和禁止重做日誌歸檔;
執行全部的資料庫恢復。
STARTUP MOUNT
3.啟動實例裝入資料庫並打開資料庫
正常情況是一個實例被啟動,資料庫裝入並打開。這種模式允許任何有效用戶連接到資料庫並執行典型的資料庫訪問操作。
STARTUP[OPEN]
4.限制在啟動時對資料庫的訪問
用戶可以在嚴格的模式下啟動實例並裝入資料庫,這樣的模式只允許DBA做以下的工作:
執行結構維護,如重建索引;
執行資料庫文件的導入導出;
執行數據裝載;
臨時阻止典型用戶使用數據
STARTUP RESTRICT
5.強制實例啟動
可以用下面命令來強行啟動實例,如果一個實例正在啟動,則STARTUP FORCE 重新啟動。
STARTUP FORCE;
6.啟動一個實例,裝入資料庫,並啟動全部的介質恢復
如果用戶要求介質恢復,可以啟動一個實例,裝入指向實例的資料庫,並自動地啟動恢復程序。
STARTUP OPEN RECOVER;
7.啟動獨占或並行模式
如果用戶的ORACLE伺服器允許多個實例來並發的訪問一個資料庫(Oracle 並行伺服器選項),應選擇獨占或並行裝入資料庫。例如:
STARTUP OPEN sale PFILE=initsale.ora PARALLEL;
如果用戶指定獨占(預設),那麼資料庫只能由當前的實例裝入並打開。下面是一個獨占的模式的實例:
STRARTUP OPEN sales PFILE=initsales.ora EXECLUSIVE RESTRICT
另外:
STARTUP [FORCE] [RESTRICT] [PFILE= filename] [OPEN [RECOVER][ database] | MOUNT | NOMOUNT]
STARTUP OPEN:STARTUP預設的參數就是OPEN,打開資料庫,允許資料庫的訪問。當前實例的控制文件中所描述的所有文件都已經打開。
STARTUP MOUNT:MOUNT資料庫,僅僅給DBA進行管理操作,不允許資料庫的用戶訪問。僅僅只是當前實例的控制文件被打開,數據文件未打開。
STARTUP NOMOUNT:僅僅通過初始化文件,分配出SGA區,啟動資料庫後台進程,沒有打開控制文件和數據文件。不能任何訪問資料庫。
STARTUP PFILE= filename:以filename為初始化文件啟動資料庫,不是採用預設初始化文件。
STARTUP FORCE:中止當前資料庫的運行,並開始重新正常的啟動資料庫。
STARTUP RESTRICT:只允許具有RESTRICTED SESSION許可權的用戶訪問資料庫。
STARTUP RECOVER:資料庫啟動,並開始介質恢復。
SHUTDOWN參數說明:
SHUTDOWN有四個參數:NORMAL、TRANSACTIONAL、IMMEDIATE、ABORT。預設不帶任何參數時表示是NORMAL。
SHUTDOWN NORMAL:不允許新的連接、等待會話結束、等待事務結束、做一個檢查點並關閉數據文件。啟動時不需要實例恢復。
SHUTDOWN TRANSACTIONAL:不允許新的連接、不等待會話結束、等待事務結束、做一個檢查點並關閉數據文件。啟動時不需要實例恢復。
SHUTDOWN IMMEDIATE:不允許新的連接、不等待會話結束、不等待事務結束、做一個檢查點並關閉數據文件。沒有結束的事務是自動rollback的。啟動時不需要實例恢復。
SHUTDOWN ABORT:不允許新的連接、不等待會話結束、不等待事務結束、不做檢查點且沒有關閉數據文件。啟動時自動進行實例恢復。
另外,對於NORMAL、TRANSACTIONAL、IMMEDIATE,DB Buffer Cache的內容寫入了數據文件,沒有提交的事務被回滾,所有的資源被釋放,資料庫被「干凈」的關閉。
對於ABORT,DB Buffer Cache的內容沒有寫入數據文件,沒有提交的事務也沒有回滾。資料庫沒有ismount和關閉,數據文件也沒有關閉。當資料庫啟動時,需要通過redo log恢復數據,通過回滾段對事務回滾,對資源進行釋放。
系參考網路文章