從故障ASM磁盤組遷移數據庫到新磁盤組

   一套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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章