一套RHEL上的10G RAC,半年前丟了一塊磁盤。 原有系統是3塊150G的磁盤做的NORMAL冗餘。前幾天巡檢的時候發現少了盤(~~~~~此處省略200字)。這個環境裏面,ASMLIB, RAW都配了。 8塊盤, 64條路徑。
目前數據庫的容量已經200G了。 從asmcmd裏面看的到的信息。2塊磁盤組總空間300G,可用空間3G。目前存儲也只有300G的可用空間。穩妥起見,直接把原來的問題磁盤組中的數據庫遷移到新的300G的外部冗餘的磁盤組中。
1 環境信息描述
1.1硬件環境
操作系統 | RHEL 5.5 X86_64 |
主機 | HP刀片 |
存儲 | HP ESV400 |
1.2數據庫軟件
集羣軟件版本 | Oracle Clusterware 10.2.0.1 x86_64 |
數據庫版本 | Oracle Database 10.2.0.1 企業版 x86_64 |
數據庫補丁 | 10.2.0.5 x86_64 |
1.3存儲信息
多路徑設備 | 容量(GB) | 用途 | 裸設備信息 |
ocr1 | 1 | OCR 磁盤 | raw1 |
ocr2 | 1 | OCR 鏡像磁盤 | raw2 |
votingdisk1 | 1 | 表決磁盤 | raw3 |
votingdisk2 | 1 | 表決磁盤鏡像1 | raw4 |
votingdisk3 | 1 | 表決磁盤鏡像2 | raw5 |
asmdisk1 | 150 | ASM數據磁盤 | raw6 |
asmdisk2 | 150 | ASM數據磁盤 | raw7 |
asmdisk3 | 150 | ASM數據磁盤 | raw8 |
MOUNT_S | HEADER_STATU | MODE_ST | STATE | TOTAL | FREE | NAME | FAILGROUP | PATH |
CLOSED | MEMBER | ONLINE | NORMAL | 153597 | 0 | /dev/raw/raw7 | ||
CLOSED | FOREIGN | ONLINE | NORMAL | 1019 | 0 | /dev/raw/raw5 | ||
CLOSED | FOREIGN | ONLINE | NORMAL | 1019 | 0 | /dev/raw/raw4 | ||
CLOSED | FOREIGN | ONLINE | NORMAL | 1019 | 0 | /dev/raw/raw3 | ||
CLOSED | FOREIGN | ONLINE | NORMAL | 1019 | 0 | /dev/raw/raw2 | ||
CLOSED | FOREIGN | ONLINE | NORMAL | 1019 | 0 | /dev/raw/raw1 | ||
CACHED | MEMBER | ONLINE | NORMAL | 153597 | 3229 | BHPSDB_ASM_0000 | BHPSDB_ASM_0000 | /dev/raw/raw6 |
MISSING | UNKNOWN | OFFLINE | HUNG | 153597 | 13761 | BHPSDB_ASM_0001 | BHPSDB_ASM_0001 | |
CACHED | MEMBER | ONLINE | NORMAL | 153597 | 3230 | BHPSDB_ASM_0002 | BHPSDB_ASM_0002 | /dev/raw/raw8 |
/dev/raw/raw7爲故障磁盤,該盤的狀態已經爲MISSING。
1.4遷移規劃
由於原有磁盤組使用的是NORMAL冗餘方式。剩餘的空間只有3G。數據庫空間爲200G。ASM磁盤組空間不足以存放數據庫。而且新增的磁盤只有一塊300G的盤。爲避免磁盤REBALANCE出現異常。因此將300G的磁盤做成EXTERNAL冗餘方式,並採用RMAN COPY的方式,將數據庫遷移到新的磁盤組。遷移成功後,在將原有的3塊150G的磁盤刪除。並創建一個新的EXTERNAL磁盤組備用。
2 數據庫備份
該操作由備份廠家完成。
3 ASM識別磁盤
3.1停集羣環境
原有環境中使用了多路徑,裸設備映射,ASMLIB配置。ASM添加磁盤時需要進行多路徑和裸設備信息配置,爲安全起見,停數據庫和集羣環境後進行操作。
[oracle@bhpsdb1~]$ crs_stat –t
[oracle@bhpsdb1~]$ srvctl stop database -d bhspdb
[root@bhpsdb1 ~]#crsctl stop crs
3.2操作系統識別磁盤
由於該系統的磁盤路徑較多,因此識別出的磁盤設備也比較多。但是原有的磁盤都做了分區操作。因此不包含分區信息的磁盤。就是新添加的磁盤。
[root@bhpsdb1 ~]#ls -la /dev/sd* | grep -v '[0-9]$'
3.3配置磁盤多路徑(所有節點)
新增磁盤的WWID信息,可以通過/scsi_id –gus /block/sdnew 或 ls -la /dev/disk/by-id 中獲取。
[root@bhpsdb1 ~]#scsi_id -gus /block/sdf
[root@bhpsdb1 ~]#ls -la /dev/disk/by-id
新增紅色部分內容。
[root@bhpsdb1 ~]# vi /etc/multipath.conf
multipaths {
……
multipath{
wwid 36001438005deda610000600001040000
alias asmdisk4
}
}
3.4重啓多路徑服務(所有節點)
[root@bhpsdb1 ~]#service multipathd restart
3.5檢測多路徑設備狀態(所有節點)
確保新增的磁盤asmdisk4配置可以查詢到。
[root@bhpsdb1 ~]#multipath -ll
asmdisk4(36001438005deda610000600000f80000) dm-0 HP,HSV400
[size=300G][features=1queue_if_no_path][hwhandler=0][rw]
\_round-robin 0 [prio=200][active]
\_ 0:0:3:3 sdaa 65:160 [active][ready]
\_ 1:0:1:3 sdaq 66:160 [active][ready]
\_ 1:0:3:3 sdbg 67:160 [active][ready]
\_ 0:0:1:3 sdk 8:160 [active][ready]
\_round-robin 0 [prio=40][enabled]
\_ 1:0:0:3 sdai 66:32 [active][ready]
\_ 1:0:2:3 sday 67:32 [active][ready]
\_ 0:0:0:3 sdc 8:32 [active][ready]
\_ 0:0:2:3 sds 65:32 [active][ready]
3.6格式化多路徑設備
格式化設備的目的是和原有的磁盤設備保持一致。SD設備格式化以後,會有一個分區信息,用於區分新掛載的普通sd磁盤。
單個節點執行格式化操作:
[root@bhpsdb1 ~]#ls -la /dev/mapper/*
[root@bhpsdb1 ~]#kpartx /dev/mapper/asmdisk4
其他節點進行分區設備發現操作:
[root@bhpsdb2 ~]#partprobe
3.7裸設備綁定(所有節點)
編輯裸設備配置文件,添加新磁盤配置。
3.7.1配置裸設備綁定文件
[root@bhpsdb1 ~]#vi /etc/sysconfig/rawdevices
/dev/raw/raw9 /dev/mapper/asmdisk4p1
3.7.2重啓裸設備服務
[root@bhpsdb1 ~]#service rawdevices restart
3.7.3修改裸設備權限
[root@bhpsdb1 ~]#chown oracle:oinstall /dev/raw/raw9
[root@bhpsdb1 ~]#chmod 644 /dev/raw/raw9
3.7.4修改系統啓動文件
添加新增設備的權限和屬組修改腳本。
[root@bhpsdb1 ~]#vi /etc/rc.local
/bin/chownoracle:oinstall /dev/raw/raw9
/bin/chmod644 /dev/raw/raw9
3.7.5檢測新增裸設備
保障裸設備的屬組爲oracle:oinstall,權限爲644。
[root@bhpsdb1 ~]#ls -la /dev/raw/raw*
4 創建新磁盤組
4.1檢查磁盤狀態信息
[oracle@bhpsdb1 ~]$kfod a='/dev/asm*' d=all o=all s=true
4.2創建ASM磁盤組
[oracle@bhpsdb1 ~]$ export ORACLE_SID=+ASM1
[oracle@bhpsdb1 ~]$ sqlplus / as sysdba
SQL> CREATE DISKGROUP CRMDGNEWEXTERNAL REDUNDANCY DISK '/dev/asm-data3';
4.3其他節點掛載磁盤組
[oracle@bhpsdb2~]$ sqlplus / as sysdba
SQL> alter diskgroup CRMDGNEW mount;
4.4檢測磁盤組信息
[oracle@bhpsdb1~]$ asmcmd lsdg
[oracle@bhpsdb2~]$ asmcmd lsdg
5 遷移數據庫到新磁盤組
5.1啓動單實例到NOMOUNT
SQL> startup nomount;
SQL> create pfile='/home/oracle/crmdb.pfile' from spfile;
5.1.1調整參數文件修改控制文件到新磁盤組
SQL> set linesize 120;
SQL> show parameter control;
SQL> alter system setcontrol_files='+CRMDGNEW/crmdb/controlfile/control01.ctl' scope=spfile;
5.1.2重啓實例到NOMOUNT狀態
SQL> startup force nomount;
5.2恢復控制文件
[oracle@bhpsdb1~]$ rman target /
RMAN> RESTORE CONTROLFILE FROM '+CRMDG/crmdb/controlfile//Current.256.901636495';
5.3拷貝數據庫
MOUNT數據庫實例,進行數據庫拷貝操作。
RMAN> ALTER DATABASE MOUNT;
RMAN>
RUN
{
ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev4 DEVICE TYPE DISK;
BACKUP AS COPY DATABASE FORMAT '+CRMDGNEW';
}
5.4切換數據庫到拷貝
RMAN> SWITCH DATABASE TO COPY;
5.5打開數據庫
SQL> alter database open;
5.6打開其他實例並檢查
該操作在數據庫的其他實例進行。
SQL> STARTUP
SQL> SELECT INST_ID, STATUS FROM GV$INSTANCE;
5.7創建臨時表空間到新磁盤組
RMAN> REPORT SCHEMA;
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '+CRMDGNEW' SIZE 1G;
SQL> ALTER TABLESPACE TEMP DROP TEMPFILE'+CRMDG/crmdb/tempfile/temp.262.901636511';
5.8創建重做日誌到新磁盤組
5.8.1查詢當前日誌組信息
SQL> SET LINESIZE 120;
SQL> COL MEMBER FOR A80;
SELECT DISTINCT 'ALTERDATABASE DROP LOGFILE GROUP '||GROUP#||';' FROM V$LOGFILE;
5.8.2添加新日誌組
ALTER DATABASE ADDLOGFILE THREAD 1 GROUP 5 ('+CRMDGNEW') SIZE 100M;
ALTER DATABASE ADDLOGFILE THREAD 1 GROUP 6 ('+CRMDGNEW') SIZE 100M;
ALTER DATABASE ADDLOGFILE THREAD 2 GROUP 7 ('+CRMDGNEW') SIZE 100M;
ALTER DATABASE ADDLOGFILE THREAD 2 GROUP 8 ('+CRMDGNEW') SIZE 100M;
5.8.3刪除舊日誌組
在刪除舊日誌組之前,進行多次日誌切換,保證舊日誌組狀態均爲INACTIVE。
SQL> SET LINESIZE 120;
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
SQL> ALTER SYSTEM CHECKPOINT GLOBAL;
SQL> SELECT * FROM V$LOG ORDER BY 1;
下列腳本由查詢日誌腳本生成:
ALTER DATABASE DROPLOGFILE GROUP 1;
ALTER DATABASE DROPLOGFILE GROUP 2;
ALTER DATABASE DROPLOGFILE GROUP 3;
ALTER DATABASE DROPLOGFILE GROUP 4;
5.8.4添加原有日誌組
ALTER DATABASE ADDLOGFILE THREAD 1 GROUP 1 ('+CRMDGNEW') SIZE 100M;
ALTER DATABASE ADDLOGFILE THREAD 1 GROUP 2 ('+CRMDGNEW') SIZE 100M;
ALTER DATABASE ADDLOGFILE THREAD 2 GROUP 3 ('+CRMDGNEW') SIZE 100M;
ALTER DATABASE ADDLOGFILE THREAD 2 GROUP 4 ('+CRMDGNEW') SIZE 100M;
5.9修改參數文件
5.9.1備份SPFILE文件
SQL> show parameter spfile;
SQL> create pfile='/home/oracle/crmdb.pfile' from spfile;
5.9.2生成新SPFILE文件
createspfile='+CRMDGNEW/spfilecrmdb.ora' from pfile='/home/oracle/crmdb.pfile';
5.9.3修改dbs目錄下的PFILE文件
[oracle@bhpsdb1~]$ cd $ORACLE_HOME/dbs
[oracle@bhpsdb1dbs]$ vi initcrmdb1.ora
SPFILE='+CRMDGNEW/spfilecrmdb.ora'
5.9.4重啓數據庫驗證
SQL> shutdown immediate;
SQL> startup;
6 刪除故障磁盤
以下操作需要在ASM實例環境下進行。
6.1DISMOUNT舊磁盤組
將其他實例的CRMDG磁盤組DISMOUNT。
SQL> alter diskgroup CRMDG dismount;
6.2刪除磁盤組下的文件
ASMCMD> cd CRMDG
ASMCMD> rm -r ./crmdb
6.3刪除舊磁盤組
SQL> DROP DISKGROUP CRMDG;
6.4檢查磁盤狀態
[oracle@bhpsdb1 ~]$kfod a='/dev/asm*' d=all o=all s=true