asm磁碟組建立錯誤,用中轉儲存,重建磁碟組

tonglei2000發表於2015-03-26
asm磁碟組建立成normal模式,使用好長時間以後,才發現空間不夠了,想調整為external模式,不能線上更改,需要刪掉磁碟組重新建立,最後確定實施方案,
找另外的儲存中轉,這樣不用導資料了,做的好,幾乎可以不用停機。
大體思路是找同樣容量的中轉儲存,線上加到現有磁碟組,把原來的盤從asm中剔出,這樣資料全部都在中轉儲存上了,原來的盤重新建立一個新的磁碟組,冗餘模式選擇為external。
使用rman的copy把資料線上遷移到新建的正確的磁碟組,然後遷移控制檔案,都遷移好了,刪掉中轉磁碟組。
下面是詳細的實施步驟!
儲存劃盤,作業系統認盤,試了試,不重啟不行,還是重啟了一把。
認到硬碟以後,fdisk分割槽。
使用下面的命令建立asm硬碟。
/etc/init.d/oracleasm createdisk asm_lv21 /dev/sdc1
/etc/init.d/oracleasm createdisk asm_lv22 /dev/sdd1
使用下面的命令檢視
/etc/init.d/oracleasm listdisks
使用下面的命令加到現在的盤組中。
SQL> conn / as sysasm                  
Connected.
SQL> alter diskgroup data add disk 'ORCL:asm_lv21';  
Diskgroup altered.
SQL> alter diskgroup data add disk 'ORCL:asm_lv22';
Diskgroup altered.
檢視asm同步情況,有內容表示沒有完成
SQL> select * from v$asm_operation;

GROUP_NUMBER OPERA STAT      POWER     ACTUAL      SOFAR   EST_WORK   EST_RATE
------------ ----- ---- ---------- ---------- ---------- ---------- ----------
EST_MINUTES ERROR_CODE
----------- --------------------------------------------
           1 REBAL RUN           1          1        281    1097936        351
       3127

使用下面的命令檢視剩餘時間
SQL> select EST_MINUTES from v$asm_operation;

可以考慮使用下面的命令提高響應級別來縮短時間

SQL>  alter diskgroup data rebalance power 5;

SQL> select * from v$asm_operation;檢視沒有輸出,全部同步完成。

從diskgroup刪掉原來的硬碟
SQL> alter diskgroup data drop disk 'asm_lv1';
SQL> alter diskgroup data drop disk 'asm_lv2';

去掉asm標記


/etc/init.d/oracleasm deletedisk asm_lv1

/etc/init.d/oracleasm deletedisk asm_lv2

因為硬體的原因,又重新分割槽,分割槽的時候因為硬碟是3TB的,fdisk不能使用,最後用的lvm。
pvcreate /dev/sdb
pvdisplay
vgcreate datavg /dev/sdb
lvcreate -n lvdata01 -L 300g datavg
lvcreate -n lvdata02 -L 300g datavg
lvcreate -n lvdata03 -L 300g datavg
lvcreate -n lvdata04 -L 300g datavg
lvcreate -n lvdata05 -L 300g datavg
lvcreate -n lvdata06 -L 300g datavg
lvcreate -n lvdata07 -L 300g datavg
lvcreate -n lvdata08 -L 300g datavg
lvcreate -n lvdata09 -L 300g datavg
lvcreate -n lvdata10 -L 300g datavg
vgdisplay /dev/datavg

asm標記

/etc/init.d/oracleasm createdisk asm_lv01 /dev/mapper/datavg-lvdata01
/etc/init.d/oracleasm createdisk asm_lv02 /dev/mapper/datavg-lvdata02
/etc/init.d/oracleasm createdisk asm_lv03 /dev/mapper/datavg-lvdata03
/etc/init.d/oracleasm createdisk asm_lv04 /dev/mapper/datavg-lvdata04
/etc/init.d/oracleasm createdisk asm_lv05 /dev/mapper/datavg-lvdata05
/etc/init.d/oracleasm createdisk asm_lv06 /dev/mapper/datavg-lvdata06
/etc/init.d/oracleasm createdisk asm_lv07 /dev/mapper/datavg-lvdata07
/etc/init.d/oracleasm createdisk asm_lv08 /dev/mapper/datavg-lvdata08
/etc/init.d/oracleasm createdisk asm_lv09 /dev/mapper/datavg-lvdata09

用圖形介面建立的asm磁碟組,這次選擇了正確的冗餘方式。

開始進行rman的資料遷移,保證資料庫是歸檔模式。測試新建了一個表空間,把資料檔案遷移。
backup as  copy datafile 306 format '+newdata';
sql 'alter database datafile 306 offline';
switch datafile 306 to copy;
recover datafile 306;
sql 'alter database datafile 306 online';

然後編寫指令碼,用上面的方法把資料檔案都弄到中轉儲存上,除了1號和3號資料檔案,即system和undo檔案。
新增temp檔案,放在新的位置。然後刪除掉。
新增日誌組,放在新的位置。然後切換日誌組,並刪除掉。
因為操作不熟,所以後面多啟了幾次資料庫,可以一次搞定。
切換system和undo檔案
startup mount;
rman裡面執行
backup as  copy datafile 1 format '+newdata';
switch datafile 1 to copy;
backup as  copy datafile 3 format '+newdata';
switch datafile 3 to copy;
alter database open;
所有資料檔案搞定。
create pfile='/tmp/0325.ora' from spfile;
控制檔案比較難搞,即使是mount方式下,使用backup as copy current controfile命令和copy current controfile必須要open resetlogs;
open resetlogs也無所謂,但是總想不那麼搞。中間考慮過使用asm的ftp進行檔案傳輸。最後忽然想到使用asmcmd工具中的cp。
把資料庫停掉,在asm裡面cp控制檔案。
第一次使用cp命令,報錯,差了一下是因為cp裡面原檔案帶了一串數字,目標不能帶數字,改成下面的命令,就ok了。
cp +DATA/rmdb/CONTROLFILE/current.256.831058221 +NEWDATA/rmdb/CONTROLFILE/current.ctl
修改pfile的相關內容,全部完成。
最後還是發現一個問題,就是asm例項的初始化檔案居然在舊的盤組裡面,建立pfile,然後啟動,建立spfile,為了省事,直接把spfile不放到asm裡面,放到
dbs目錄裡面,簡單。
現在資料檔案都回到原有硬碟,但磁碟組的冗餘屬性已經改成外部冗餘了。
把中轉磁碟組dismount一段時間,沒有問題,幹掉,ok,搞完。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13337857/viewspace-1474947/,如需轉載,請註明出處,否則將追究法律責任。

相關文章