映象會話中主伺服器的擴容

2022-01-29 17:24:59 字數 4234 閱讀 2393

某乙個映象會話中的主庫所在伺服器磁碟容量不足了,現要新新增乙個磁碟分割槽用於擴容。通常的做法是:加完分割槽後,新增新資料檔案(或者新檔案組)到新分割槽,之後再重做映象。

如果此庫比較大,則重做映象會是件耗時和拖累效能的事情。會不會有更好的方法呢?在實際操作中,我以」資料庫檔案布局方式」分為三種情況:

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...