CONVERT DATABASE命令(三)

yangtingkun發表於2009-07-23

RMAN新增了CONVERT命令,在前面的文章中已經介紹瞭如何利用CONVERT命令在不同平臺間轉換表空間。對於相同位元組序的資料庫,Oracle還提供了CONVERT DATABASE的命令。

Oracle10g新增CONVERT語法:http://yangtingkun.itpub.net/post/468/483871

利用CONVERT實現跨平臺表空間遷移:http://yangtingkun.itpub.net/post/468/483949

這一篇介紹執行CONVERT DATABASE過程中碰到的錯誤。

CONVERT DATABASE命令(一):http://yangtingkun.itpub.net/post/468/487880

CONVERT DATABASE命令(二):http://yangtingkun.itpub.net/post/468/487972

 

 

最開始碰到的問題是要求進行CONVERT的資料庫必須處於只讀狀態:

RMAN> convert database
2> new database ytktran
3> skip offline
4> transport script. 'e:\trans_script.sql'
5> to platform. 'Linux 64-bit for AMD'
6> format 'e:\oracle\backup\%T_%n_%N.dbf'
7> ;

啟動 convert 29-6 -09
使用通道 ORA_DISK_1

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: backup
命令 ( 06/29/2009 15:16:37 ) 失敗
RMAN-06920:
資料庫 YTK102 未以只讀方式開啟

RMAN> exit


恢復管理器完成。

顯然,執行執行CONVERT DATABASE資料庫命令要求源資料庫處於只讀狀態:

E:\>sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 6 29 15:17:11 2009

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


連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> startup open read only
ORACLE
例程已經啟動。

Total System Global Area  603979776 bytes
Fixed Size                  1249332 bytes
Variable Size             213913548 bytes
Database Buffers          381681664 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
ORA-16006: audit_trail
目標與資料庫開啟模式不相容


SQL> show parameter audit_trail

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_trail                          string      DB
SQL> alter system set audit_trail = none scope = spfile;

系統已更改。

SQL> shutdown immediate
ORA-01109:
資料庫未開啟


已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> startup open read only
ORACLE
例程已經啟動。

Total System Global Area  603979776 bytes
Fixed Size                  1249332 bytes
Variable Size             213913548 bytes
Database Buffers          381681664 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
資料庫已經開啟。

在將資料庫置於只讀狀態的過程中,還碰到了audit_trail初始化引數與只讀資料庫不相容的問題,需要將AUDIT_TRAIL初始化引數置為NONEOS,然後才能以READ ONLY方式開啟資料庫。

第二個問題比較有意思,仔細檢查了兩遍才發現問題所在:

E:\>rman target /

恢復管理器: Release 10.2.0.1.0 - Production on 星期一 6 29 15:29:27 2009

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

連線到目標資料庫: YTK102 (DBID=3695768905)

RMAN> convert database
2> new database ytktran
3> skip offline
4> transport script. 'e:\trans_script.sql'
5> to platform. 'Linux 64-bit for AMD'
6> format 'e:\oracle\backup\%T_%n_%N.dbf'
7> ;

啟動 convert 29-6 -09
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=154 devtype=DISK

在資料庫中找到外部表 SH.SALES_TRANSACTIONS_EXT
在資料庫中找到外部表 YANGTK.T_EXTERNAL
在資料庫中找到外部表 YANGTK.T_EXTERNAL2

在資料庫中找到目錄 SYS.AUDIT_DIR
在資料庫中找到目錄 SYS.D_OUTPUT1
在資料庫中找到目錄 SYS.D_OUTPUT
在資料庫中找到目錄 SYS.SUBDIR
在資料庫中找到目錄 SYS.XMLDIR
在資料庫中找到目錄 SYS.MEDIA_DIR
在資料庫中找到目錄 SYS.LOG_FILE_DIR
在資料庫中找到目錄 SYS.DATA_FILE_DIR
在資料庫中找到目錄 SYS.WORK_DIR
在資料庫中找到目錄 SYS.ADMIN_DIR
在資料庫中找到目錄 SYS.DATA_PUMP_DIR

在資料庫中找到 BFILE PM.PRINT_MEDIA

在口令檔案中找到使用者 SYS (具有 SYSDBA and SYSOPER 許可權)
在口令檔案中找到使用者 YANGTK (具有 SYSDBA 許可權)
跳過離線檔案4
RMAN-06060:
警告: 跳過資料檔案將影響表空間 USERS 的恢復
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00007 name=E:\ORACLE\ORADATA\YTK102\MGMT.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\20090629_YTK102XX_MGMT_TABLESPACE.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:01:25
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00002 name=E:\ORACLE\ORADATA\YTK102\UNDOTBS01.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\20090629_YTK102XX_UNDOTBS1.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:01:05
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00001 name=E:\ORACLE\ORADATA\YTK102\SYSTEM01.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\20090629_YTK102XX_SYSTEM.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:55
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00003 name=E:\ORACLE\ORADATA\YTK102\SYSAUX01.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\20090629_YTK102XX_SYSAUX.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:45
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00006 name=E:\ORACLE\ORADATA\YTK102\YANGTK01.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\20090629_YTK102XX_YANGTK.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:15
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00005 name=E:\ORACLE\ORADATA\YTK102\EXAMPLE01.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\20090629_YTK102XX_EXAMPLE.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:15
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00008 name=E:\ORACLE\ORADATA\YTK102\YANGTK02.DBF

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backup
命令 (ORA_DISK_1 通道上, 06/29/2009 15:34:23 ) 失敗
ORA-19504:
無法建立檔案"E:\ORACLE\BACKUP\20090629_YTK102XX_YANGTK.DBF"
ORA-27038:
所建立的檔案已存在
OSD-04010:
指定了 選項, 但檔案已經存在

原來問題出在FORMAT引數上,由於表空間YANGTK包括兩個資料檔案,而這兩個資料檔案在FORMAT引數上沒有體現出區別,所以二者最終生成的檔名是一致的,第一個資料檔案的CONVERT操作沒有問題,但是第二個資料檔案在執行的時候名稱與第一個資料檔案CONVERT後生成的檔名稱一樣,也就導致了上面檔案已經存在的錯誤。

而且這個錯誤出現了,Oracle在目標目錄中留下了大量的資料檔案,而沒有進行清除。這些資料檔案需要手工進行清除。

可以修改FORMAT引數,比如新增DATAFILE的檔案號,或者新增%U唯一標識名稱,解決這個問題,也可以透過新增DB_FILE_NAME_CONVERT的方式來避免錯誤的產生:

RMAN> convert database
2> new database ytktran
3> skip offline
4> transport script. 'e:\trans_script.sql'
5> to platform. 'Linux 64-bit for AMD'
6> db_file_name_convert ('e:\oracle\oradata\ytk102\', 'e:\oracle\backup\')
7> ;

啟動 convert 29-6 -09
使用通道 ORA_DISK_1

在資料庫中找到外部表 SH.SALES_TRANSACTIONS_EXT
在資料庫中找到外部表 YANGTK.T_EXTERNAL
在資料庫中找到外部表 YANGTK.T_EXTERNAL2

在資料庫中找到目錄 SYS.AUDIT_DIR
在資料庫中找到目錄 SYS.D_OUTPUT1
在資料庫中找到目錄 SYS.D_OUTPUT
在資料庫中找到目錄 SYS.SUBDIR
在資料庫中找到目錄 SYS.XMLDIR
在資料庫中找到目錄 SYS.MEDIA_DIR
在資料庫中找到目錄 SYS.LOG_FILE_DIR
在資料庫中找到目錄 SYS.DATA_FILE_DIR
在資料庫中找到目錄 SYS.WORK_DIR
在資料庫中找到目錄 SYS.ADMIN_DIR
在資料庫中找到目錄 SYS.DATA_PUMP_DIR

在資料庫中找到 BFILE PM.PRINT_MEDIA

在口令檔案中找到使用者 SYS (具有 SYSDBA and SYSOPER 許可權)
在口令檔案中找到使用者 YANGTK (具有 SYSDBA 許可權)
跳過離線檔案4
RMAN-06060:
警告: 跳過資料檔案將影響表空間 USERS 的恢復
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00007 name=E:\ORACLE\ORADATA\YTK102\MGMT.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\MGMT.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:01:35
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00002 name=E:\ORACLE\ORADATA\YTK102\UNDOTBS01.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\UNDOTBS01.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:01:05
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00001 name=E:\ORACLE\ORADATA\YTK102\SYSTEM01.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\SYSTEM01.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:01:06
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00003 name=E:\ORACLE\ORADATA\YTK102\SYSAUX01.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\SYSAUX01.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:45
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00006 name=E:\ORACLE\ORADATA\YTK102\YANGTK01.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\YANGTK01.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:15
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00005 name=E:\ORACLE\ORADATA\YTK102\EXAMPLE01.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\EXAMPLE01.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:15
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00008 name=E:\ORACLE\ORADATA\YTK102\YANGTK02.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\YANGTK02.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:16
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00010 name=E:\ORACLE\ORADATA\YTK102\MGMT_ECM_DEPOT1.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\MGMT_ECM_DEPOT1.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:15
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00009 name=E:\ORACLE\ORADATA\YTK102\TEST01.DBF
已轉換的資料檔案 = E:\ORACLE\BACKUP\TEST01.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:01
在目標平臺上執行 SQL 指令碼 E:\TRANS_SCRIPT.SQL 以建立資料庫
編輯 init.ora 檔案 E:\ORACLE\ORACLE1020\DATABASE\INIT_00KIQ9S4_1_0.ORA。此 PFILE
 
將用於在目標平臺上建立資料庫據
要重新編譯所有 PL/SQL 模組, 請在目標平臺上執行 utlirp.sql utlrp.sql
要更改內部資料庫識別符號, 請使用 DBNEWID 實用程式
完成 backup 29-6 -09

還有就是junsansi碰到的問題,由於版本不同,導致的資料庫必須執行升級操作才能開啟,且由於32位和64位平臺問題,導致執行catupgrd.sql指令碼過程中碰到的錯誤,這個問題在下面的文章中已經詳細描述過了,這裡就不再重複了。

 

 

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

相關文章