ASM (2)

zhyuh發表於2007-01-30
========================
二、將資料庫轉移到ASM上
========================
[@more@]

我們用RMAN實現這一功能。在轉移資料庫以前,先設若干跟檔案儲存位置相關的引數。

C:¥oracle¥product¥10.2.0¥db_1¥database>set oracle_sid=orcl

C:¥oracle¥product¥10.2.0¥db_1¥database>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 28 10:38:52 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect/ as sysdba
已連線。
SQL> show parameter db_create_file_dest

NAME                  TYPE      VALUE                        
--------------------- --------- ------------------------------
db_create_file_dest   string    C:¥oracle¥product¥10.2.0¥orada
ta
SQL> alter system set db_create_file_dest='+DGROUP1' scope=spfile;

系統已更改。

SQL> alter system set db_recovery_file_dest='+DGROUP1' scope=spfile;

系統已更改。

SQL> alter system set db_recovery_file_dest_size=3000M scope=spfile;

系統已更改。

SQL> alter system reset control_files scope=spfile  sid='*';

系統已更改。

ALTER SYSTEM RESET 命令用來在SPFILE中刪除(unset)引數,此處用來刪除control_file引數,因為移到ASM上後需要重建control file。


將資料庫重啟到nomount狀態。
SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup nomount
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             272632708 bytes
Database Buffers          331350016 bytes
Redo Buffers                7135232 bytes
SQL> exit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 斷開

啟動RMAN。
C:¥oracle¥product¥10.2.0¥db_1¥database>rman target /

恢復管理器: Release 10.2.0.1.0 - Production on 星期四 12月 28 10:42:58 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

連線到目標資料庫: orcl (未裝載)

RMAN> restore controlfile from
'C:¥oracle¥product¥10.2.0¥oradata¥ORCL¥CONTROLFILE¥O1_MF_2OT4KXWB_.CTL';

啟動 restore 於 28-12月-06
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK

通道 ORA_DISK_1: 已複製控制檔案副本
輸出檔名=+DGROUP1/orcl/controlfile/backup.256.610368623
輸出檔名=+DGROUP1/orcl/controlfile/backup.257.610368627
完成 restore 於 28-12月-06

由於引數CREATE_FILE_DEST和RECOVERY_FILE_DEST都進行了設定,所以建立了2份controlfile。

轉移資料庫時使用命令 BACKUP AS COPY DATABASE...
RMAN> alter database mount;

資料庫已裝載
釋放的通道: ORA_DISK_1

RMAN> backup as copy database format '+DGROUP1';

啟動 backup 於 28-12月-06
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=153 devtype=DISK
通道 ORA_DISK_1: 啟動資料檔案副本
輸入資料檔案 fno=00001 name=C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_SYSTEM_2OT4J2H4_.DBF
輸出檔名 = +DGROUP1/orcl/datafile/system.258.610368679 標記 = TAG20061228T105117 recid = 1 時間戳 = 610368724
通道 ORA_DISK_1: 資料檔案複製完畢, 經過時間: 00:00:56
通道 ORA_DISK_1: 啟動資料檔案副本
輸入資料檔案 fno=00003 name=C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_SYSAUX_2OT4J2J3_.DBF
輸出檔名 = +DGROUP1/orcl/datafile/sysaux.259.610368733 標記 = TAG20061228T105117 recid = 2 時間戳 = 610368759
通道 ORA_DISK_1: 資料檔案複製完畢, 經過時間: 00:00:35
通道 ORA_DISK_1: 啟動資料檔案副本
輸入資料檔案 fno=00002 name=C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_UNDOTBS1_2OT4J2M1_.DBF
輸出檔名 = +DGROUP1/orcl/datafile/undotbs1.260.610368769 標記 = TAG20061228T105117 recid = 3 時間戳 = 610368771
通道 ORA_DISK_1: 資料檔案複製完畢, 經過時間: 00:00:04
通道 ORA_DISK_1: 啟動資料檔案副本
輸入資料檔案 fno=00004 name=C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_USERS_2OT4J2M1_.DBF
輸出檔名 = +DGROUP1/orcl/datafile/users.261.610368773 標記 = TAG20061228T105117 recid = 4 時間戳 = 610368773
通道 ORA_DISK_1: 資料檔案複製完畢, 經過時間: 00:00:03
通道 ORA_DISK_1: 啟動資料檔案副本
複製當前控制檔案
輸出檔名 = +DGROUP1/orcl/controlfile/backup.262.610368775 標記 = TAG20061228T105117 recid = 5 時間戳 = 610368778
通道 ORA_DISK_1: 資料檔案複製完畢, 經過時間: 00:00:03
通道 ORA_DISK_1: 啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
在備份集中包含當前的 SPFILE
通道 ORA_DISK_1: 正在啟動段 1 於 28-12月-06
通道 ORA_DISK_1: 已完成段 1 於 28-12月-06
段控制程式碼=+DGROUP1/orcl/backupset/2006_12_28/nnsnf0_tag20061228t105117_0.263.610368779 標記=TAG20061228T105117 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:02
完成 backup 於 28-12月-06

RMAN> switch database to copy;

資料檔案 1 已切換成資料檔案副本 "+DGROUP1/orcl/datafile/system.258.610368679"
資料檔案 2 已切換成資料檔案副本 "+DGROUP1/orcl/datafile/undotbs1.260.610368769"
資料檔案 3 已切換成資料檔案副本 "+DGROUP1/orcl/datafile/sysaux.259.610368733"
資料檔案 4 已切換成資料檔案副本 "+DGROUP1/orcl/datafile/users.261.610368773"

RMAN> alter database open;

資料庫已開啟

RMAN> exit


恢復管理器完成。


資料庫轉移完成,用SQL*PLUS進入資料庫檢查狀態。
C:¥oracle¥product¥10.2.0¥db_1¥database>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 28 10:56:48 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect / as sysdba
已連線。

SQL> select instance_name,status from v$instance;

INSTANCE_NAME                    STATUS
-------------------------------- ------------------------
orcl                             OPEN

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
+DGROUP1/orcl/controlfile/backup.256.610368623
+DGROUP1/orcl/controlfile/backup.257.610368627

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
+DGROUP1/orcl/datafile/system.258.610368679
+DGROUP1/orcl/datafile/undotbs1.260.610368769
+DGROUP1/orcl/datafile/sysaux.259.610368733
+DGROUP1/orcl/datafile/users.261.610368773

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥ONLINELOG¥O1_MF_3_2OT4L52X_.LOG
C:¥ORACLE¥PRODUCT¥10.2.0¥FLASH_RECOVERY_AREA¥ORCL¥ONLINELOG¥O1_MF_3_2OT4L63F_.LOG

C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥ONLINELOG¥O1_MF_2_2OT4L2VC_.LOG
C:¥ORACLE¥PRODUCT¥10.2.0¥FLASH_RECOVERY_AREA¥ORCL¥ONLINELOG¥O1_MF_2_2OT4L43X_.LOG

C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥ONLINELOG¥O1_MF_1_2OT4L0WS_.LOG
C:¥ORACLE¥PRODUCT¥10.2.0¥FLASH_RECOVERY_AREA¥ORCL¥ONLINELOG¥O1_MF_1_2OT4L1X9_.LOG

已選擇6行。

SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------
C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_TEMP_2OT4LL2X_.TMP

可以看到controlfile和datafile都已經建在ASM磁碟上了,但是logfile和tempfile還在原先位置上。

轉移tempfile。
SQL> alter tablespace TEMP add tempfile;

表空間已更改。

SQL> alter database tempfile 'C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_TEMP_2OT4LL2X_.TMP' drop;

資料庫已更改。

SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------
+DGROUP1/orcl/tempfile/temp.264.610369327

轉移logfile,先增加3個組。
SQL> alter database add logfile size 50m;

資料庫已更改。

SQL> alter database add logfile size 50m;

資料庫已更改。

SQL> alter database add logfile size 50m;

資料庫已更改。

SQL> select group#,status from v$log order by group#;

    GROUP# STATUS
---------- --------------------------------
         1 CURRENT
         2 INACTIVE
         3 INACTIVE
         4 UNUSED
         5 UNUSED
         6 UNUSED

已選擇6行。

SQL> alter database drop logfile group 2;

資料庫已更改。

SQL> alter database drop logfile group 3;

資料庫已更改。

刪除logfile group 1的時候會有些麻煩,因為你執行 SQL> alter system switch logfile 以後,GROUP 1的狀態並不是INACTIVE,而是ACTIVE。得執行多次該命令,才能使GROUP 1處於INACTIVE狀態。當然重啟資料庫也是個辦法。
當GROUP 1處於INACTIVE狀態時,我們就可以DROP GROUP 1。

SQL> select group#,status from v$log order by group#;

    GROUP# STATUS
---------- --------------------------------
         1 INACTIVE
         4 INACTIVE
         5 CURRENT
         6 INACTIVE


SQL> alter database drop logfile group 1;

資料庫已更改。

SQL> select group#,status from v$log order by group#;

    GROUP# STATUS
---------- --------------------------------
         4 INACTIVE
         5 CURRENT
         6 INACTIVE

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------
+DGROUP1/orcl/onlinelog/group_4.265.610369507
+DGROUP1/orcl/onlinelog/group_4.266.610369511
+DGROUP1/orcl/onlinelog/group_5.267.610369523
+DGROUP1/orcl/onlinelog/group_5.268.610369527
+DGROUP1/orcl/onlinelog/group_6.269.610369537
+DGROUP1/orcl/onlinelog/group_6.270.610369541

已選擇6行。

這樣我們把整個資料庫都移到了ASM上。

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

相關文章