認識資料庫版本
資料庫版本
若要查詢 SQL Server 的產品版本、版本編號等,可以使用以下的範例程式碼:
SELECT LEFT(@@VERSION, CHARINDEX('-', @@VERSION)-1) N'資料庫版本' , SERVERPROPERTY('Edition') N'執行個體版本', SERVERPROPERTY('ProductVersion') N'版本編號', SERVERPROPERTY('ProductLevel') N'版本層級', DATABASEPROPERTYEX('master','Version') N'內部版本號碼'
內部資料庫版本
內部資料庫版本是資料庫內部使用的版本號碼。
你不能自行變更資料庫的內部版本,當你由舊版的 SQL Server 資料庫透過附加或還原的方式轉換到新版 SQL Server 時,系統就會自動升級資料庫的內部版本。
內部資料庫版本與資料庫版本的對應關係如下所示:
內部資料庫版本 | SQL Server 版本 |
---|---|
539 | SQL Server 2000 |
611/612 | SQL Server 2005 |
655 | SQL Server 2008 |
661 | SQL Server 2008 R2 |
706 | SQL Server 2012 |
查看資料庫現在的內部版本為何
SELECT compatibility_level FROM sys.databases WHERE name = 'VITO2012'; SELECT DATABASEPROPERTY('VITO2012', 'Version') 資料庫內部版本;
查看當初建立資料庫的內部版本為何
USE [VITO2012]; DBCC TRACEON (3604); DBCC DBINFO; DBCC TRACEOFF (3604);
執行個體版本與內部資料庫版本不是一對一
PS.
執行個體版本編號與內部資料庫版本不是一對一的,通常每個SP,都會有一個執行個體版本編號。
例如,SQL Server 2008 R2 資料庫的內部版本號碼是:661,其版本編號是:10.50.1600.1。
若安裝累積更新套件 7 (CU7) 之後,SQL Server 2008 R2 的資料庫內部版本號碼還是 661,但版本編號則會提升到:10.50.1777.0。
若安裝 SP2 之後,內部版本號碼還是 661,但版本編號則會提升到:10.50.4000.0。
相容性層級(COMPATIBILITY_LEVEL )
相容性層級用來描述資料庫版本的相容性。 當建立新的資料庫時,預設會使用該版本預設的相容性層級,例如,在 SQL Server 2012 資料庫的預設相容性層級為 110 。 你也可以指定較低版本的相容性層級(最低90)。
相容性層級只會影響指定之資料庫的行為,而不會影響整個伺服器的行為。 例如,如果你將相容性層級由 110 降為 100 ,你將無法使用 TRY_CONVERT 關鍵字,但不影響 SQL 2012 執行個體的行為。
以下列表為目前 SQL 各版本的相容性層級:
相容性層級 | SQL Server 版本 |
---|---|
80 | SQL Server 2000 |
90 | SQL Server 2005 |
100 | SQL Server 2008 及 SQL Server 2008 R2 |
110 | SQL Server 2012 |
檢視相容性層級
USE AdventureWorks2012; GO SELECT compatibility_level FROM sys.databases WHERE name = 'AdventureWorks2012'; GO
在 SSMS 中,由資料庫屬性中也可以直接查看與變更。
變更相容性層級
當使用備份還原方式,將舊版資料庫轉到較新版資料庫時,其相容性層級並不會自動更新。 如果變更成新的相容性層級,可以如下操作:
ALTER DATABASE AdventureWorks2012 SET COMPATIBILITY_LEVEL = 110; GO
複製資料庫
要將資料庫複製到另一個執行個體,有以下幾種方式:
- 使用「卸離附加」方法。(此方法必須離線操作)
- 使用「複製資料庫精靈」。
- 使用「備份還原」方法。
- 使用「指令碼精靈」產生指令碼來發行資料庫。
- 使用「資料庫發行精靈」產生指令碼來發行資料庫。
使用「複製資料庫精靈」
這個方法相當方便,可以用來複製、移動、升級資料庫,也支援在目的伺服器建立登入資訊。
不過,它也有一些限制如下:
- Express 版中沒有複製資料庫精靈。
- 資料庫升級後,無法降級至舊版。
- 無法複製系統資料庫。
- 無法移動全文檢索目錄,您必須在移動之後重新擴展索引。
必要條件
確定目的地伺服器上已啟動 SQL Server Agent。
使用「備份還原」方法
這個方法有幾點要注意:
- 無法將新版資料庫還原到舊版資料庫。
- 還原時會自動建立資料庫檔案,依預設,會使用原備份檔案相同的名稱和路徑。
- 你也可以指定還原資料庫的裝置對應、檔案名稱或路徑。
- 操作還原的登入,會成新資料庫的擁有者,你可以使用系統管理員或新的資料庫擁有者變更資料庫擁有權。
使用「指令碼精靈」產生指令碼來發行資料庫
您可以使用 [產生和發佈指令碼精靈] ,將整個資料庫或個別的資料庫物件發行至新的執行個體。
開啟 [產生和發佈指令碼精靈]
在進階功能中,變更以下選項。因為我們要將資料一併輸出,所以指令碼類型要設定:「結構和資料」。
最後,將輸出的 T-SQL 指令檔拿到到目的資料執行即可。如果預存資料庫檔案的路徑不同於原先的資料庫,記得在以下的地方變更。
PS
此方法不支援下降版本。
PS2
不知是否因為版本更新的結果,目前這個版本(Microsoft SQL Server 2008 R2 (SP2) )可以轉換出較舊版本的腳本指令碼。而 SQL 2012 Express 版也可以。
使用「資料庫發行精靈」產生指令碼來發行資料庫
使用 [資料庫發行精靈] ,類似 [產生和發佈指令碼精靈] ,它也是目前唯一支援下降版本的發行方法。
目前最近版本為 SQL Server Database Publishing Wizard 1.4 版,並內建於 Visual Studio 2010 之中,其安裝好之後的程式所在路徑為 C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Publishing\1.4\SqlPubWiz.exe。
執行 SqlPubWiz.exe 程式,開啟 [資料庫發行精靈]
選擇要發行的資料庫
這個步驟最重要,它會依你指定的目標資料庫版本來產生相容的指令碼。
最後,將輸出的 T-SQL 指令檔拿到到目的資料執行即可。
PS
這個指令不會建立資料庫,你必須在新的環境先建立資料庫,再執行這個腳本。
將 SQL 2012 的資料庫轉至 SQL 2008
上面的「資料庫發行精靈」工具,提供 SQL2008 轉 SQL 2005 或 SQL2000,沒有 SQL2012 降轉至 SQL2008 的服務。 如果要 SQL2012 降轉至 SQL2008 ,就直接使用 SQL2012 中的[工作]->[產生指令碼]功能即可。 這個方式雖然不會直接發行到目標資料庫去,但是,你只要將產生的Script在目標資料庫執行一下即可。 要注意的的,在進階選項中,必須挑選目標資料庫的版本,這樣子才會產生符合版本的Script。 還有,編寫的指令碼可選擇「結構描述和資料」,這樣子Script才會包含結構描述和資料。
升級 SQL Logins
資料庫在轉移時,可以連同使用者資訊一併轉移。 可是新的伺服器不見得有相同的登入,這將發生孤兒問題(orphaned user)。 也就是使用者無法對應到SQL登入。
所以你可以替需要的登入建立Scrip,再拿到新伺服器執行即可。
不過這個方法建立的登入將不會包含密碼資訊,你必須另外重新設定密碼。 如果不想這麼麻煩,還可以利用 sp_hexadecimal 和 sp_help_revlogin 這兩個SP來處理。 詳細方法可參考這篇BLOG:轉換不同SQL Server的登入和密碼
沒有留言:
張貼留言