一、使用背景
實際項目中,經常由於數據庫服務器磁盤空間不足,導致現場數據無法及時入庫,引發系統無法訪問的問題,這種情況一般是清理服務的磁盤空間,主要有,刪除不必要的日志、備份文件或不必要的軟件等;但是,對於數據庫服務器而言,除了必要的軟件外,一般不在安裝其他軟件,保存的基本上為現場數據文件,所以,針對這種情況,一般我們只能做數據遷移,遷移至空間更大的磁盤或者其他服務器中。這里以SQL Server數據為例,簡要說明涉及到的步驟。
二、實現步驟
1.更改數據庫實例(含數據文件和日志文件)的保存路徑
使用SQL Server自帶的連接工具,SQL Server Management Studio,連接后,在連接名處,右擊,選擇“屬性”,在屬性框,定位至“數據庫設置”選項卡,在“數據庫默認位置”設置新的路徑,如下圖:
點擊“確定”,保存修改,此時,會及時生效,不需要重啟服務;
2.更改用戶數據庫(含數據庫文件和日志文件)的保存路徑
a)新建查詢語句,分別輸入以下命令,查詢用戶數據庫存儲位置
select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files
where database_id=db_id(N'prd_poms');
其中,prd_poms表示用戶自己定義的數據庫名稱,該語句用於查詢,prd_poms數據庫的數據文件和日志文件的名稱,以及對應的路徑,便於后續步驟使用。
查詢結果可能如下圖:
b)更改用戶數據庫的保存路徑
輸入以下語句:
1、查詢用戶ID信息
Select name,dbid From Master..SysDataBases
2更改用戶數據文件路徑
alter database prd_poms modify file ( name = prd_poms, filename = 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\prd_poms.mdf');
alter database prd_poms modify file ( name = prd_poms_log, filename = 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\prd_poms_log.ldf');
上述語句中,粗體紅色的部分為數據庫的名稱,與步驟a)中的數據庫名稱一致,斜體紅色部分對應步驟a)中查詢的結果,分別表是文件名稱,而紅色斜體黃色背景部分為,文件更改后最終需要保存的路徑。
c)執行后,在文件正確的情況下,會提示修改成功。
注:由於SQL Server數據庫還有系統數據庫,因此,還需要對系統數據庫按照上述步驟做同樣的修改,這里不再累述。
3.修改完成后,需要重啟數據庫服務,才能使設置生效。
a)暫停數據庫服務,打開SQL Server 配置管理器(數據庫自帶工具),找到SQL Server服務,停止服務,如下圖:
或者直接在系統的“服務”中,找到SQL Server服務,停止服務也OK。
b)停止數據庫服務后,要確保新的路徑已經存在,否則會導致數據庫無法啟動,以及其他異常。所以,沒有的路徑,請新建路徑。再將原來數據庫文件(含數據和日志文件)均復制到新的目錄中。注:數據庫服務必須要停止,否則無法復制相關文件。
3.重啟數據庫服務,使所有配置生效
三、出現的問題
若出現無法啟動的情況,且從系統的“事件查看器”中,發現原因為:
“FCB::Open failed: 無法打開文件號 1 的文件”之類報錯信息,解決方式如下:
找到SQL Server服務,右擊,選擇“屬性”,如圖:
在彈框的“登錄”選項卡中,選擇“本地賬戶”登錄,保存,如下圖
將用戶的數據文件權限改為完全
再次啟動SQL Server服務,即可成功。
四、全部sql
下面寫上一些sql語句:
查詢系統數據庫數據和日志文件存儲路徑:
select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files
where database_id=db_id(N'master');
select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files
where database_id=db_id(N'model');
select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files
where database_id=db_id(N'msdb');
select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files
where database_id=db_id(N'tempdb');
更改系統數據庫和日志文件存儲路徑:
alter database master modify file ( name = master, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf');
alter database master modify file ( name = mastlog, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mastlog.ldf');
alter database model modify file ( name = modeldev, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\model.mdf');
alter database model modify file ( name = modellog, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\modellog.ldf');
alter database msdb modify file ( name = MSDBData, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\MSDBData.mdf');
alter database msdb modify file ( name = MSDBLog, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\MSDBLog.ldf');
alter database tempdb modify file ( name = tempdev, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\tempdb.mdf');
alter database tempdb modify file ( name = templog, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\templog.ldf');
查詢用戶數據庫數據和日志文件存儲路徑
select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files
where database_id=db_id(N'prd_acs');
更改用戶數據庫和日志文件存儲路徑:
alter database prd_acs modify file ( name = prd_acs, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\prd_acs.mdf');
alter database prd_acs modify file ( name = prd_acs_log, filename = 'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\prd_acs_1.ldf');
————————————————
版權聲明:本文為CSDN博主「bird_tp」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/bird_tp/article/details/94551586