顯示具有 SQL Server 標籤的文章。 顯示所有文章
顯示具有 SQL Server 標籤的文章。 顯示所有文章

2011年9月22日 星期四

淺談資料庫實體檔案搬移(3)

延續上篇現在我們來看第三種方法
方法三:利用T-SQL語法
首先我們利用T-SQL語法查詢Northwind資料庫的相關資料


--database_id DB的ID
--name 邏輯名稱
--physical_name 實際檔案儲存位置
SELECT database_id, name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID('Northwind');


從查詢結果我們可以得知Northwind資料庫的DB ID、邏輯名稱及實際檔案儲存位置,接著我們要變更實際檔案儲存位置,由C:\SQL Server 2000 Sample Databases目錄改為D:\SQL Server 2000 Sample Databases目錄,執行以下語法可以完成目錄變更


--變更檔案儲存位置
ALTER DATABASE Northwind
MODIFY FILE (NAME = Northwind, FILENAME = 'D:\SQL Server 2000 Sample Databases\Northwind.mdf');

ALTER DATABASE Northwind
MODIFY FILE (NAME = Northwind_log, FILENAME = 'D:\SQL Server 2000 Sample Databases\Northwind_log.ldf');

這裡要注意的是完成語法只是代表系統目錄已修改Northwind資料庫的檔案路徑,但實際檔案還是要自己將Northwind.mdf及Northwind_log.ldf從C:\SQL Server 2000 Sample Databases目錄移至D:\SQL Server 2000 Sample Databases目錄


為了能搬移檔案我們執行資料庫離線語法

USE master
--設定離線
ALTER DATABASE Northwind SET OFFLINE


執行後我們才可以搬移Northwind.mdf及Northwind_log.ldf到D:\SQL Server 2000 Sample Databases目錄,搬移完成後再執行資料庫在線語法


USE master
--設定在線
ALTER DATABASE Northwind SET ONLINE

最後我們再利用語法檢查


--database_id DB的ID
--name 邏輯名稱
--physical_name 實際檔案儲存位置
SELECT database_id, name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID('Northwind');


至於Detach/Attach與ALTER DATABASE的不同可點此參考,最後還是再提醒讀者這一系列的發文只針對單純的個人使用環境不適用於複雜營運中的資料庫。




淺談資料庫實體檔案搬移(2)

延續上篇我們現在來看第二種方法
方法二:利用備份、還原方式
整個流程是先備份Northwind資料庫再刪除Northwind資料庫,刪除Northwind資料庫的目的在於移除C:\SQL Server 2000 Sample Databases目錄下的NORTHWND.MDF及NORTHWND.LDF,接著我們建立同名資料庫並將路徑選擇在D:\SQL Server 2000 Sample Databases目錄,最後再將備份檔還原,以下為操作說明及圖示,首先選取Northwind資料庫,按滑鼠右鍵選取[工作(T)]並點選[備份(B)...]




接著我們為備份檔命名及指定存放路徑








接著我們刪除原先的Northwind資料庫


再新增同名資料庫,並將路徑指定於D:\SQL Server 2000 Sample Databases目錄




此時我們可以看到D:\SQL Server 2000 Sample Databases目錄下產出Northwind.mdf及Northwind_log.ldf



接著我們再將備份檔還原到新建的Northwind資料庫,先點選Northwind資料庫接著按滑鼠右鍵選取[工作(T)],選取[工作(T)]後再選取[還原(R)],最後點選[資料庫(D)]


還原來源選取D:\SQL Server 2000 Sample Databases目錄的備份檔




最後只要選取[選項]頁面並勾選[覆寫現有的資料庫]再按[確定]鈕即可




如果我們的實體磁碟機有二顆以上,在備份時可將備份檔指定放在資料庫所在磁碟之外的磁碟,可加速備份及還原主要能加速的原因是減少硬碟I/O的爭用。


下篇

2011年9月19日 星期一

淺談資料庫實體檔案搬移(1)

撰寫這篇的原因起於同學在使用MS SQL上的問題,同學的實驗環境中資料庫實體檔案是儲存在C磁碟槽,但目前C磁碟槽剩餘空間不足,無法應付後續資料的成長,所以想將資料庫搬移至D磁碟槽,因此我提出了三個搬移方式,至於運作於商業環境的資料庫使用者,則請忽略此篇文章,因為商業環境的資料庫搬移需要更細膩的策略這裡不探討,底下為Demo環境及三個搬移方式說明:

OS:Windows XP Professional Service Pack 3
DBMS:SQL Server 2005 Developer Edition
DB:Northwind

方法一:利用卸離、附加方式
一般來說我們無法搬移正在使用中的使用者資料庫,必須先將資料庫卸離後才能移動資料庫,否則將會出現下圖的錯誤


我們要將Northwind資料庫的實體檔案從C:\SQL Server 2000 Sample Databases目錄移至D:\SQL Server 2000 Sample Databases目錄,首先我們先點選Northwind資料庫,再點選滑鼠右鍵並移至[工作]選擇[卸離]


當資料庫卸離後我們可以搬移檔案到D:\SQL Server 2000 Sample Databases目錄,搬移的檔案包含資料庫的mdf檔及ldf檔


搬移完成後,我們要附加資料庫,我們先點選[資料庫]再按右鍵選取[附加]

此時會出現挑選畫面,按下[加入(A)...]挑選D:\SQL Server 2000 Sample Databases目錄下的NORTHWND.MDF,最後按下[確定]



最後我們再來檢視一下附加後的Northwind資料庫檔案路徑,點選Northwind資料庫後,按滑鼠右鍵並選擇[屬性],在屬性視窗中選擇[檔案]頁面


下篇

2011年4月9日 星期六

SSMS操作資料表欄位效能問題

使用Microsoft SQL Server Management Studio(本文之後都簡稱為SSMS)圖形介面操作帶給我們許多方便,但有些時候應該直接以T-SQL語法下達,以下是以資料表新增欄位來說明效能問題

原始資料表schema
CREATE TABLE [dbo].[tbl]
(
    [col1] [nvarchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL,
    [col2] [nvarchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL
) ON [PRIMARY]


我們針對上述的資料表tbl新增欄位col3,分別以SSMS和T-SQL操作並以SQL Server Profiler錄製以了解背後運作過程

SSMS操作畫面


SSMS錄製結果
CREATE TABLE dbo.Tmp_tbl
(
    col1 nvarchar(50) NOT NULL,
    col2 nvarchar(50) NOT NULL,
    col3 nvarchar(50) NOT NULL
)  ON [PRIMARY]

IF EXISTS(SELECT * FROM dbo.tbl)
    EXEC('INSERT INTO dbo.Tmp_tbl (col1, col2)
        SELECT col1, col2 FROM dbo.tbl WITH (HOLDLOCK TABLOCKX)')

DROP TABLE dbo.tbl

EXECUTE sp_rename N'dbo.Tmp_tbl', N'tbl', 'OBJECT'


T-SQL操作畫面


T-SQL錄製結果
alter table tbl
    add col3 nvarchar(50) not null


由上面的結果我們可以發現利用SSMS新增欄位時會執行四個步驟
1.建立以Tmp_開頭的資料表
2.將原本的資料表資料寫入Tmp_資料表
3.drop原本資料表
4.將Tmp_資料表改名

如果要新增欄位的資料表本身含有大量資料,此時就不適合利用SSMS應該改以直接下達T-SQL以減輕系統負載,另外變更資料表欄位類型也跟新增欄位執行相同的步驟。

2010年10月5日 星期二

新版Microsoft SQL Server Management Studio摘要在那裡?

最近工作上的SQL Server從2005升級到2008,所以SSMS(SQL Server Management Studio)也安裝了新版。在使用新版的SSMS居然找不到摘要可供物件的排序,後來利用google搜尋後才知道新版的SSMS已經不叫摘要而叫物件總管詳細資料,使用方式可以在「檢視」點選「物件總管詳細資料」或直接按F7。