某乙個映象會話中的主庫所在伺服器磁碟容量不足了,現要新新增乙個磁碟分割槽用於擴容。通常的做法是:加完分割槽後,新增新資料檔案(或者新檔案組)到新分割槽,之後再重做映象。
如果此庫比較大,則重做映象會是件耗時和拖累效能的事情。會不會有更好的方法呢?在實際操作中,我以」資料庫檔案布局方式」分為三種情況:
1. 主庫和映象庫的檔案布局一樣,而且新增加分割槽碟符在兩台機上都存在。
「一樣」指mdf/ndf和ldf檔案目錄位址相同。在建立映象時,還原資料庫未指定「move」則會一樣。
如主庫包含c:\db_test\mirror_test_data.mdf和
c:\db_test\mirror_test_log.ldf,則映象庫的檔案目錄位址也是這樣。
主機新加的分割槽為d,新增資料檔案或檔案組一樣指向d:\newfile。映象機上也要有d分割槽。模擬**如下:
use master
gocreate
database [mirror_test] on
primary
( name = n'mirror_test', filename = n'c:\db_test\mirror_test_data.mdf' , size = 3072kb ,
maxsize = 5120kb , filegrowth = 1024kb )
log on
( name = n'mirror_test_log', filename = n'c:\db_test\mirror_test_log.ldf' , size = 5120kb ,
maxsize = 10240kb , filegrowth = 1024kb )
gouse mirror_test
go--每行佔一頁,方便快速填充滿資料
create
table tb1(id int
notnull,val char(8000));
goset nocount on;
declare @i int=0,@val char(8000)='abc';
--不到1000行就會充滿,然後報錯
while (@i<1000)
begin
insert
into tb1 values(@i,@val);
set @i=@i+1;
endset nocount off;
go建立並填充資料後,再配置映象
。成功新增新分割槽d盤(兩邊都有)後,開始新增資料檔案。在兩台機上的d盤分別建立了d:\newfile目錄用於新增新檔案。
<1.新增資料檔案。成功新增,而且映象會話正常。
alter
database mirror_test
addfile( name = n'mirror_test_data2', filename = n'd:\newfile\mirror_test_data2.ndf' , size = 3072kb ,
maxsize = 5120kb , filegrowth = 1024kb )
to filegroup [primary]
go<2.新增檔案組。成功新增,而且映象會話正常。
alter
database mirror_test add filegroup [newfg]
goalter
database mirror_test
addfile( name = n'mirror_test_data3', filename = n'd:\newfile\mirror_test_data3.ndf' , size = 3072kb ,
maxsize = 5120kb , filegrowth = 1024kb )
to filegroup [newfg]
go<3.新增日誌檔案。成功新增,而且映象會話正常。
alter
database mirror_test
add log file( name = n'mirror_test_log2', filename = n'd:\newfile\mirror_test_log2.ldf' , size = 1024kb ,
maxsize = 5120kb , filegrowth = 1024kb)
to filegroup [primary]
go2. 主庫和映象庫的檔案布局不相同,而且新增加分割槽碟符在兩台機上都存在。
顧名思義,檔案目錄位址不同。生產環境中,往往是這樣的。
刪除之前的映象環境,主庫的建立跟之前的一樣,檔案分布在c:\db_test。只是在建立映象庫時,用move選項將映象庫的檔案還原到e:\db_test。
配置映象後,主庫檔案:
映象庫檔案:
主庫伺服器成功新增新分割槽d盤(兩邊都有)後,開始新增資料檔案。在兩台機上的d盤分別建立了d:\newfile目錄用於新增新檔案。**跟前面的一樣。
<1.新增資料檔案。成功新增,而且映象會話正常。
<2.新增檔案組。成功新增,而且映象會話正常。
<3.新增日誌檔案。成功新增,而且映象會話正常。
3. 主庫和映象庫的檔案布局不相同,而且新增加分割槽的碟符在映象機上不存在。
這是生產環境上最複雜的情況。
建立映象環境,主庫檔案指向c:\db_test,映象庫檔案指向d:\db_test。在主庫伺服器上新增加磁碟分割槽e,而映象服器上沒有分割槽e。
主庫新增加資料檔案指向e:\newfile,而映象伺服器新增資料檔案將指向d:\newfile.
<1.新增資料檔案。
alter
database mirror_test
addfile( name = n'mirror_test_data2', filename = n'e:\newfile\mirror_test_data2.ndf' , size = 3072kb ,
maxsize = 5120kb , filegrowth = 1024kb )
to filegroup [primary]
go執行新增後,報錯並且資料檔案沒有新增到磁碟上:
訊息 1833,級別 16,狀態 2,第 1 行
只有執行了下乙個 backup log 操作後,才能再次使用檔案 'mirror_test_data2'。
按提示備份主庫的日誌,拿到映象庫去還原。還原時要注意:
因為映象伺服器沒有e盤,所以還原時需要指定move選項以還原到d:\newfile.
restore log mirror_test
from
disk=n'c:\db_test\mtl2.bak'
with norecovery, move 'mirror_test_data2' to 'd:\newfile\db_test_data2.ndf'
go仍然報錯:
訊息 3104,級別 16,狀態 1,第 1 行
無法對資料庫 'mirror_test' 執行 restore,因為已將它配置用於資料庫映象。如果希望還原該資料庫,則請使用 alter database 刪除映象。
也就是說,仍然要停掉映象會話才能恢復日誌。其實停掉後,也不能恢復日誌。
正確的做法是:先停止映象會話—>主庫新增檔案—>備份主庫日誌並在映象庫上還原—>重建映象會話。
<2.新增檔案組。
正確的做法是:先停止映象會話—>主庫新增檔案—>備份主庫日誌並在映象庫上還原—>重建映象會話。
<3.新增日誌檔案。
正確的做法是:先停止映象會話—>主庫新增檔案—>備份主庫日誌並在映象庫上還原—>重建映象會話。
總結
伺服器擴容
公司伺服器有兩塊硬碟 a 1t,b 2t 系統裝在a上,b準備當做工作目錄,和備份容災。下面主要敘述一下操作 把硬碟裝好後,我們用 fdisk l 檢視下 圖中可以看出 dev sdb 是2900g,新加的硬碟。接下來我用命令 fdisk sdb 進行分割槽,輸入 p 檢視新硬碟分割槽,如圖 可以用...
映象伺服器
為什麼做映象伺服器?映象伺服器的主要目的就是為了伺服器之間的負載均衡!而在我們國家,映象伺服器更多用於解決南北線路不通 網通電信互聯緩慢 的問題!如何做映象伺服器?1 基於特定伺服器軟體的負載均衡 這種技術是利用網路協議的重定向功能來實現負載均衡的,例如在http協議中支援定位指令,接收到這個指令的...
伺服器映象啟動
本公司伺服器是用docker 的,並且寫了指令碼直接命令啟動docker映象 docker restart 但是除錯的時候,要想看到結果詳情,就要進行以下 流程 1 docker enter.sh hopeful newton 進入docker 2 vim bin run.sh 也可以先cd到bin...