2015年11月23日 星期一

如何規畫並進行SQL Server的搬移計畫

近日接到新的專案,由於最近新進一台主機,所以需要將原本的SQL Server 2012搬移到新的主機上,由於需要確認的事項眾多,所以我將相關的所有過程整理起來,以備日後與大家參考,加有不足的部份也歡迎大家補充。

環境描述:

  1. SQL Server 2012(11.3000)
  2. 只有使用基本的Backup方案,沒有使用其他的DR(Disaster Recovery)方案。
  3. 有使用Third-Party軟體進行備份檔案的移地備份。
  4. 新舊資料庫主機的環境已設定成相同。

預期方案:

  1. 兩台資料庫主機在完成後,會進行IP的交換。
  2. 由於為了避免轉移失敗,所以會先保留原機,待移轉成功後,再進行舊機器的處理。
  3. 在搬移資料檔的方式有很多種,可以參考下列的作法,但由於我的二台主機的版本與版號完全相同,所以我將透過附加資料檔的方式進行。

    Move a database from one server to another server in SQL Server 2008
    http://blogs.msdn.com/b/sreekarm/archive/2009/09/11/move-a-database-from-one-server-to-another-server-in-sql-server-2008.aspx

先前檢查動作:

  1. 確認相關的應用程式,在進行搬移時,也需要進行停機的動作。
  2. 確認所有連線到此資料庫的應用程式,是否有透過資料庫主機名稱進行連線,如果有請進行調整。
  3. 確認新主機上的1433 Port是否已有開啟,詳細的SQL Server Port設定可以參考下列的連結:

    Configure the Windows Firewall to Allow SQL Server Access
    https://msdn.microsoft.com/en-us//library/cc646023(v=sql.120).aspx
  4. 確認兩台資料庫設定(sp_configure)是否相符。
  5. 確認各資料庫的大小與搬移時所需的時間。
  6. 確認新主機的磁碟空間大小是否足夠。
  7. 確認資料庫搬移後,新的資料庫主機的磁碟代號是否相符。
  8. 確認有那些Database Login、Users與相關的權限設定。
  9. 確認有那些已建立的相依性物件(SQL Agent Jobs、Linked Servers)。
  10. 確認有那些維護計畫需要進行搬移。
  11. 確認有那些DTS Package需要進行搬移。

總體停機時間評估:

  1. 資料庫搬移:如我的資料庫總大小為122G,而如果透過單純的網路傳輸,約為每秒80MB,所以大約傳輸完成最快要下列的時間,但實際上可能不會這麼的理想。

    All Data Files 122G/ Network Transfer 80MB = 1561.6 sec
  2. 移轉登入與密碼(可事先準備)
  3. 解決孤兒使用者的問題,相關的處理方式,請使用下列的語法進行處理。

    sp_change_users_login (Transact-SQL)
    https://technet.microsoft.com/zh-tw/library/ms174378(v=sql.110).aspx
  4. 移動作業、警示與操作員(可事先準備)。
  5. 移動 DTS 封裝(可事先準備)
  6. IP位置更換
  7. 相關應用程式上線與測試。
  8. 相關問題排除。

     
PS:在總體時間上建議可以多評估較長時間,以免在轉移後發現問題無法即時處理。


詳細轉移動作:
關於詳細的轉換方式,由於在官網上已有詳細的說明,如下列的作法,我將大項目列出,僅供參考。

  1. 移動使用者資料庫
  2. 移轉登入與密碼
  3. 解決孤兒使用者的問題
  4. 移動作業、警示與操作員
  5. 移動 DTS 封裝
  6. 變更 sp_configure 設定以符合先前的系統

     如何在執行 SQL Server 的電腦之間移動資料庫
     https://support.microsoft.com/zh-tw/kb/314546


確認檢查表:


檢查表檔案下載:
https://onedrive.live.com/redir?resid=F8199A68177F41CB!7062&authkey=!ABsNtbO68dxPBtI&ithint=file%2cxlsx


關鍵字:Migrating SQL Server DatabasesChecklistMove Database

2015年11月7日 星期六

如果在AlwaysOn上進行各個節點的Data File與Log File的搬移

近日由於資料量的成長,所以原本配置的磁碟已不夠空間,在進行評估後,決定要將Data File與Log File搬到新的磁碟上,但由於我的AlwaysOn架構已上線了,所以必須在最短的時間內進行搬移,在參考了相關的文件後,我也將我的設定方式整理如下。

環境說明:
依據我之前的文件說明,我的AlwaysOn目前有三個節點、第一、二節點為同步,第三個節點為非同步,並且設定可以進行唯讀。

預期方案:
為了不影響正常的運作,所以預期會在主要節點先進行設定,但設定完成後,再Failover到次要節點,此時再進行檔案的搬移,最後再Failover到另一個節點,再進行設定後即可,所以在此次的影響,只有二次各約1~3秒的時間,也就是Failover的時間。

設定步驟:
1、如果次要節點可以進行連線與讀取時,需要先行關閉,但由於我的架構只有第三個節點可以唯讀連線,所以只需設定第三個節點即可。

USE[master]
GO
ALTER AVAILABILITY GROUP [cary-ag] MODIFY REPLICA ON N 'cary-sqln3' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = NO))
GO

2、設定資料庫的實體檔案路徑,請注意此設定並不會立即生效,只有當資料庫重新啟動時,才會進行生效。

此動作請依序在三個不同的節點上各自進行,並且注意存放的目錄也要讓SQL Server的啟動帳號有讀寫的權限。

ALTER DATABASE [cary-db] MODIFY FILE (NAME='cary-db',FILENAME='E:\sql_data\cary-db.mdf')
go
ALTER DATABASE [cary-db] MODIFY FILE (NAME='cary-db_log',FILENAME='E:\sql_data\cary-db_log.ldf')
go

3、請在主要節點上進行Failover,此時主要與次要節點的身份會進行互換。
ALTER AVAILABILITY GROUP [cary-ag] FAILOVER;
GO

4、切換完成後,請在原本的主要節點(切換後是次要節)上,先將SQL Server的服務先停止,然後再將檔案複製到你的目的地,然後再進行服務的啟動,此時再確認Data File與Log File是否已指定到新的位置上。

5、同樣的,再進行第三個步驟,然後再進行另一個節點的設定,直到三個節點都設定完成。

6、最後都設定完成後,再將第三個節點的唯讀連線開啟,即設定完成。
USE[master]
GO
ALTER AVAILABILITY GROUP [cary-ag] MODIFY REPLICA ON N'cary-sqln3' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY))
GO

參考連結:
How to move databases configured for SQL Server AlwaysOn
http://blogs.msdn.com/b/sqlserverfaq/archive/2014/02/06/how-to-move-databases-configured-for-sql-server-alwayson.aspx

關鍵字:AlwaysOnData FileLog File