CONVERT DATABASE命令(一)

yangtingkun發表於2009-07-21

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命令的過程。

 

 

前兩天幫junsansi解決了CONVERT DATABASE資料庫過程中出現的問題,正好這幾天打算測試CONVERT DATABASE的內容,於是就仿照他的例子,做了一個完整的測試。

登陸資料庫,檢查資料庫支援的可傳輸平臺:

SQL> SELECT * FROM V$TRANSPORTABLE_PLATFORM;

PLATFORM_ID PLATFORM_NAME                                      ENDIAN_FORMAT
----------- -------------------------------------------------- --------------
          1 Solaris[tm] OE (32-bit)                            Big
          2 Solaris[tm] OE (64-bit)                            Big
          7 Microsoft Windows IA (32-bit)                      Little
         10 Linux IA (32-bit)                                  Little
          6 AIX-Based Systems (64-bit)                         Big
          3 HP-UX (64-bit)                                     Big
          5 HP Tru64 UNIX                                      Little
          4 HP-UX IA (64-bit)                                  Big
         11 Linux IA (64-bit)                                  Little
         15 HP Open VMS                                        Little
          8 Microsoft Windows IA (64-bit)                      Little
          9 IBM zSeries Based Linux                            Big
         13 Linux 64-bit for AMD                               Little
         16 Apple Mac OS                                       Big
         12 Microsoft Windows 64-bit for AMD                   Little
         17 Solaris Operating System (x86)                     Little
         18 IBM Power Based Linux                              Big

已選擇17行。

下面可以執行CONVERT DATABASE命令了,這個命令要求源資料庫和目標資料庫的編碼字元序一致。且要求執行CONVERT DATABASE的源資料庫處於只讀狀態:

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

利用DBMS_FILE_TRANSFER包或ftp,完成資料檔案和初始化引數檔案的傳輸工作。

而且利用CONVERT DATABASE命令還得到了在目標資料庫上載入開啟資料庫的指令碼:E:\TRANS_SCRIPT.SQL,內容如下:

-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- The contents of online logs will be lost and all backups will
-- be invalidated. Use this only if online logs are damaged.

-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
--  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE

STARTUP NOMOUNT PFILE='E:\ORACLE\ORACLE1020\DATABASE\INIT_00KIQ9S4_1_0.ORA'

-- Create SPFILE
CREATE SPFILE FROM PFILE = 'E:\ORACLE\ORACLE1020\DATABASE\INIT_00KIQ9S4_1_0.ORA';
 

STARTUP FORCE NOMOUNT
CREATE CONTROLFILE REUSE SET DATABASE "YTKTRAN" RESETLOGS FORCE LOGGING ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'E:\ORACLE\ORACLE1020\DATABASE\ARCH_D-YTKTRAN_ID-3695768905_S-491_T-1_A-630194893_00KIQ9S4'  SIZE 50M,
  GROUP 2 'E:\ORACLE\ORACLE1020\DATABASE\ARCH_D-YTKTRAN_ID-3695768905_S-492_T-1_A-630194893_00KIQ9S4'  SIZE 50M,
  GROUP 3 'E:\ORACLE\ORACLE1020\DATABASE\ARCH_D-YTKTRAN_ID-3695768905_S-493_T-1_A-630194893_00KIQ9S4'  SIZE 50M
DATAFILE
  'E:\ORACLE\BACKUP\SYSTEM01.DBF',
  'E:\ORACLE\BACKUP\UNDOTBS01.DBF',
  'E:\ORACLE\BACKUP\SYSAUX01.DBF',
  'E:\ORACLE\BACKUP\EXAMPLE01.DBF',
  'E:\ORACLE\BACKUP\YANGTK01.DBF',
  'E:\ORACLE\BACKUP\MGMT.DBF',
  'E:\ORACLE\BACKUP\YANGTK02.DBF',
  'E:\ORACLE\BACKUP\TEST01.DBF',
  'E:\ORACLE\BACKUP\MGMT_ECM_DEPOT1.DBF'
CHARACTER SET ZHS16GBK
;

-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;

-- Files in normal offline tablespaces are now named.
ALTER DATABASE RENAME FILE 'MISSING00004'
-- WARNING! This command can not be completed because the file
-- needs to be renamed to a real file name.

-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE 'E:\ORACLE\ORACLE1020\DATABASE\DATA_D-YTKTRAN_I-3695768905_TS-TEMP_FNO-2_00KIQ9S4'
     SIZE 1024M AUTOEXTEND OFF;
-- End of tempfile additions.
--

set echo off
prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prompt * Your database has been created successfully!
prompt * There are many things to think about for the new database. Here
prompt * is a checklist to help you stay on track:
prompt * 1. You may want to redefine the location of the directory objects.
prompt * 2. You may want to change the internal database identifier (DBID)
prompt *    or the global database name for this database. Use the
prompt *    NEWDBID Utility (nid).
prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SHUTDOWN IMMEDIATE
STARTUP UPGRADE
@@ ?/rdbms/admin/utlirp.sql
SHUTDOWN IMMEDIATE
STARTUP
-- The following step will recompile all PL/SQL modules.
-- It may take serveral hours to complete.
@@ ?/rdbms/admin/utlrp.sql
set feedback 6;

利用這個檔案中給出的指令碼就可以在目標伺服器上開啟資料庫。

 

 

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

相關文章