Posts

Showing posts from July, 2013

[SQL Server] 移動資料庫檔案

Image
有使用SQL SERVER的大大也知道SQL SERVER的資料庫其實只是一個檔案(感覺好虛).

最近公司要把資料庫檔案移到新硬碟, 寫下了一些T-SQL順便筆記一下步驟:
首先把要移動的資料庫離線(OFFLINE), 例如我的資料庫是dbABC
ALTER DATABASE dbABC SET OFFLINE WITH ROLLBACK IMMEDIATE
WITH ROLLBACK IMMEDIATE 跟據這裡的解釋是說把所有在跑的transaction全部ROLLBACK.
如果發現不行的話, 可以用下面的指令把佔用database的process殺掉:
exec sp_who2 (把所有資料庫在跑的sessions列出來)
kill <process_id> (幹掉它)
移動資料庫檔案及log file到新硬碟去:
ALTER DATABASE GEE MODIFY FILE ( NAME = ABC , FILENAME = 'D:\dbABC.mdf')
ALTER DATABASE GEE MODIFY FILE ( NAME = ABC_log , FILENAME = 'D:\dbABC_log.ldf')
重新啟動資料庫:
ALTER DATABASE GEE SET ONLINE
喝淡定紅茶

[SQL Server] 利用Linked Server轉移大量數據到SQL Server之方法(以AS400為例)

Image
[20140110] 新增OLE DB版本
上次提到當我們進行異質資料庫的資料轉移,使用SQL Server內建的工具經常會發生很多不明的錯誤(例如Column size太大)。那怎麼辦呢?總不可能把資料全部變成insert Statement吧?經過爬文以後小弟最後選用了SQL Server裡的Linked Server功能. 也成功轉移了超過2000萬筆資料的資料庫,雖然可能並不是好方法也希望對大家有幫助 :-)

什麼是SQL Server 的Linked Server?
Linked Server (連結的伺服器) 根據msdn的解釋, 就是 "可讓 SQL Server Database Engine 對 SQL Server 執行個體外部的 OLE DB 資料來源執行命令。" 再說白一點, 就是可用T-SQL查詢其他品牌的資料庫。

來源資料特性:
資料在老舊的V5R4 AS400上.很多資料表(Table)的欄位(Columns)很多,接近50個欄位以上。欄位的size很大, 長度達3000或以上, 而且因為是char的關係就算改成varchar也沒用.資料量大, 很多Table超過200萬筆.
準備工作:
由於這次使用的是AS400的ODBC或OLE DB, 所以在SQL Server端一定要先安裝IBM iSeries Client Access.在SQL Server中先建立一空的資料庫需要有SQL Server SA權限的帳號動手做: 建立Linked Server
打開SQL Server Management  Studio, 登入後到Server Objects->Linked Servers->按右鍵新增Linked Server
如果你用的是ODBC
在"Linked Server"中填入此Linked Server的名字, 任意也OK, 由於這次對象是AS400, Server type要選擇Other data source, 由於這次使用的是ODBC connection, 所以Provider一欄要選擇 "Microsoft OLE DB Provider for ODBC Drivers", Product name先填as400, Data Source選擇ODBC中的來…