oracle下convert a database


You can also use RMAN to transport an entire database to a different platform so long as the two platforms have the same endian format


具體過程如下:


一 convert前提條件

1 檢查兩平臺是否有相同的字節順序


linux 平臺如下:

SQL> select platform_name,endian_format from v$transportable_platform where platform_id=(select platform_id from v$database);

PLATFORM_NAME ENDIAN_FORMAT

-------------------------------------------------- --------------

Linux x86 64-bit Little


windows 平臺如下:

SQL> select platform_name,endian_format from v$transportable_platform where plat

form_id=(select platform_id from v$database);


PLATFORM_NAME ENDIAN_FORMAT

-------------------------------------------------- --------------

Microsoft Windows x86 64-bit Little




2 檢查數據庫是否支持整體convert (需要在sqlplus下開啓serveroutput)

由於本次convert a database是從‘Linux x86 64-bit’ --->‘Microsoft Windows x86 64-bit’所以有如下:


SQL> set serveroutput on

SQL> DECLARE

2 db_ready BOOLEAN;

3 BEGIN

4 db_ready :=

5 DBMS_TDB.CHECK_DB('Microsoft Windows x86 64-bit',DBMS_TDB.SKIP_NONE);

6 END;

7 /


注意SKIP_NONE (or 0), 表示檢測所有表空間


PL/SQL procedure successfully completed.

檢查是否出現警告信息,如果沒有出現警告信息則表示可以轉換整個數據庫。


如下則表示不能轉換整個數據庫

SQL> DECLARE

2 db_ready BOOLEAN;

3 BEGIN

4 db_ready :=

5 DBMS_TDB.CHECK_DB('HP-UX (64-bit)',DBMS_TDB.SKIP_READONLY);

6 END;

7 /

The specified target platform name 'HP-UX (64-bit)' is invalid or the target

platform is not transportable.


PL/SQL procedure successfully completed.


3 確定兩平臺有相同的數據庫版本

linux 平臺如下:

SQL> select * from v$version;


BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

PL/SQL Release 11.2.0.2.0 - Production

CORE 11.2.0.2.0 Production

TNS for Linux: Version 11.2.0.2.0 - Production

NLSRTL Version 11.2.0.2.0 - Production


windows平臺如下:

SQL> select * from v$version;


BANNER

------------------------------------------------------------------------------


Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

PL/SQL Release 11.2.0.2.0 - Production

CORE 11.2.0.2.0 Production

TNS for 64-bit Windows: Version 11.2.0.2.0 - Production

NLSRTL Version 11.2.0.2.0 - Production


二 操作步驟

1 以sysdba連接數據庫

[oracle@source ~]$ sqlplus / as sysdba


SQL*Plus: Release 11.2.0.2.0 Production on Fri Nov 15 19:28:45 2013


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


Connected to an idle instance.


2 以只讀方式打開數據庫


SQL> startup mount

ORACLE instance started.


Total System Global Area 1252663296 bytes

Fixed Size 2226072 bytes

Variable Size 973080680 bytes

Database Buffers 268435456 bytes

Redo Buffers 8921088 bytes

Database mounted.

SQL> alter database open read only;


Database altered.

SQL> select open_mode from v$database;


OPEN_MODE

--------------------

READ ONLY


3 用rman連接到源數據庫作爲target

QL> host;

[oracle@source ~]$ rman target /


Recovery Manager: Release 11.2.0.2.0 - Production on Fri Nov 15 19:46:16 2013


Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.


connected to target database: CRM (DBID=3599153036)


4 轉換數據庫

RMAN> CONVERT DATABASE NEW DATABASE 'newdb'

TRANSPORT SCRIPT '/backup/convertdb/transportscript.sql'

TO PLATFORM 'Microsoft Windows x86 64-bit'

DB_FILE_NAME_CONVERT '/oracle/CRM/' '/backup/convertdb';


過程如下:


RMAN> CONVERT DATABASE NEW DATABASE 'newdb'

2> TRANSPORT SCRIPT '/backup/convertdb/transportscript.sql'

3> TO PLATFORM 'Microsoft Windows x86 64-bit'

4> DB_FILE_NAME_CONVERT '/oracle/CRM/' '/backup/convertdb';


Starting conversion at source at 15-NOV-13

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=131 device type=DISK


Directory SYS.ORACLE_OCM_CONFIG_DIR found in the database

Directory SYS.DATA_PUMP_DIR found in the database

Directory SYS.XMLDIR found in the database

Directory SYS.DUMP found in the database

Directory SYS.TSPITR_DIROBJ_DPDIR found in the database


User SYS with SYSDBA and SYSOPER privilege found in password file

channel ORA_DISK_1: starting datafile conversion

input datafile file number=00004 name=/oracle/CRM/users01.dbf

converted datafile=/backup/convertdbusers01.dbf

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:03:07

channel ORA_DISK_1: starting datafile conversion

input datafile file number=00001 name=/oracle/CRM/system01.dbf

converted datafile=/backup/convertdbsystem01.dbf

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:01:05

channel ORA_DISK_1: starting datafile conversion

input datafile file number=00002 name=/oracle/CRM/sysaux01.dbf

converted datafile=/backup/convertdbsysaux01.dbf

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:55

channel ORA_DISK_1: starting datafile conversion

input datafile file number=00005 name=/oracle/CRM/pos.dbf

converted datafile=/backup/convertdbpos.dbf

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:55

channel ORA_DISK_1: starting datafile conversion

input datafile file number=00006 name=/oracle/CRM/erp.dbf

converted datafile=/backup/convertdberp.dbf

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:15

channel ORA_DISK_1: starting datafile conversion

input datafile file number=00008 name=/oracle/CRM/undotbs03.dbf

converted datafile=/backup/convertdbundotbs03.dbf

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:15

channel ORA_DISK_1: starting datafile conversion

input datafile file number=00009 name=/oracle/CRM/jxc.dbf

converted datafile=/backup/convertdbjxc.dbf

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:01:15

channel ORA_DISK_1: starting datafile conversion

input datafile file number=00010 name=/oracle/CRM/crm.dbf

converted datafile=/backup/convertdbcrm.dbf

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:07

channel ORA_DISK_1: starting datafile conversion

input datafile file number=00003 name=/oracle/CRM/zx.dbf

converted datafile=/backup/convertdbzx.dbf

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03

channel ORA_DISK_1: starting datafile conversion

input datafile file number=00007 name=/oracle/CRM/user01.dbf

converted datafile=/backup/convertdbuser01.dbf

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01

Edit init.ora file /oracle/app/db1/dbs/init_00op1uot_1_0.ora. This PFILE will be used to create the database on the target platform

Run SQL script /backup/convertdb/transportscript.sql on the target platform to create database

To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on the target platform

To change the internal database identifier, use DBNEWID Utility

Finished conversion at source at 15-NOV-13

注意:紅色部分爲要拷貝到目標平臺的文件

6 拷貝轉換後的數據文件,參數文件,transportscript.sql 到目標平臺


7 更改參數文件和transportscript.sql的內容

更改前參數文件內容

[oracle@source ~]$ vi /oracle/app/db1/dbs/init_00op1uot_1_0.ora

# Please change the values of the following parameters:

control_files = "/oracle/app/db1/dbs/cf_D-NEWDB_id-3599153036_01op1uot"

audit_file_dest = "/oracle/app/db1/dbs/adump"

db_name = "NEWDB"


# Please review the values of the following parameters:

# __oracle_base = "/oracle/app"

__shared_pool_size = 402653184

__large_pool_size = 16777216

__java_pool_size = 16777216

__streams_pool_size = 33554432

__sga_target = 754974720

__db_cache_size = 268435456

__shared_io_pool_size = 0


remote_login_passwordfile= "EXCLUSIVE"

db_domain = ""

dispatchers = "(PROTOCOL=TCP) (SERVICE=CRMXDB)"

__pga_aggregate_target = 503316480


# The values of the following parameters are from source database:

processes = 150

memory_target = 1258291200

db_block_size = 8192

db_cache_size = 218103808

compatible = "11.2.0.0.0"

# log_archive_dest_1 = "LOCATION=/oracle/archive"

log_archive_dest_2 = ""

log_archive_format = "%t_%s_%r.dbf"

undo_tablespace = "UNDOTBS3"

undo_retention = 1200

audit_trail = "OS"

open_cursors = 300

# diagnostic_dest = "/oracle/app"


更改後參數文件initCRM.ora內容如下:

# Please change the values of the following parameters:

control_files = "e:\crm\control01.ctl"

audit_file_dest = "c:\app\admin\CRM\adump"

db_name = "CRM"

# Please review the values of the following parameters:


# __oracle_base = "c:\app"

__shared_pool_size = 402653184

__large_pool_size = 1677721

__java_pool_size = 16777216

__streams_pool_size = 33554432

__sga_target = 754974720

__db_cache_size = 268435456

__shared_io_pool_size = 0

remote_login_passwordfile= "EXCLUSIVE"

db_domain = ""

dispatchers = "(PROTOCOL=TCP) (SERVICE=CRMXDB)"

__pga_aggregate_target = 503316480

# The values of the following parameters are from source database:

processes = 150

memory_target = 1258291200

db_block_size = 8192

db_cache_size = 218103808

compatible = "11.2.0.0.0"

# log_archive_dest_1 = "LOCATION=f:\archive"

log_archive_dest_2 = ""

log_archive_format = "%t_%s_%r.dbf"

undo_tablespace = "UNDOTBS3"

undo_retention = 1200

audit_trail = "OS"

open_cursors = 300

# diagnostic_dest = "c:\app"


更改前transportscript.sql的內容


[oracle@source ~]$ cat /backup/convertdb/transportscript.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='/oracle/app/db1/dbs/init_00op1uot_1_0.ora'

CREATE CONTROLFILE REUSE SET DATABASE "NEWDB" RESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 '/oracle/app/db1/dbs/arch_D-NEWDB_id-3599153036_S-33_T-1_A-823810820_03op1uot' SIZE 200M BLOCKSIZE 512,

GROUP 2 '/oracle/app/db1/dbs/arch_D-NEWDB_id-3599153036_S-34_T-1_A-823810820_04op1uot' SIZE 200M BLOCKSIZE 512,

GROUP 3 '/oracle/app/db1/dbs/arch_D-NEWDB_id-3599153036_S-35_T-1_A-823810820_05op1uot' SIZE 200M BLOCKSIZE 512,

GROUP 4 '/oracle/app/db1/dbs/arch_D-NEWDB_id-3599153036_S-32_T-1_A-823810820_06op1uot' SIZE 200M BLOCKSIZE 512

DATAFILE

'/backup/convertdbsystem01.dbf',

'/backup/convertdbsysaux01.dbf',

'/backup/convertdbzx.dbf',

'/backup/convertdbusers01.dbf',

'/backup/convertdbpos.dbf',

'/backup/convertdberp.dbf',

'/backup/convertdbuser01.dbf',

'/backup/convertdbundotbs03.dbf',

'/backup/convertdbjxc.dbf',

'/backup/convertdbcrm.dbf'

CHARACTER SET ZHS16GBK

;


-- Database can now be opened zeroing the online logs.

ALTER DATABASE OPEN RESETLOGS;


-- Commands to add tempfiles to temporary tablespaces.

-- Online tempfiles have complete space information.

-- Other tempfiles may require adjustment.

ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/app/db1/dbs/data_D-NEWDB_I-3599153036_TS-TEMP_FNO-1_07op1uot'

SIZE 20971520 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 PFILE='/oracle/app/db1/dbs/init_00op1uot_1_0.ora'

@@ ?/rdbms/admin/utlirp.sql

SHUTDOWN IMMEDIATE

STARTUP PFILE='/oracle/app/db1/dbs/init_00op1uot_1_0.ora'

-- The following step will recompile all PL/SQL modules.

-- It may take serveral hours to complete.

@@ ?/rdbms/admin/utlrp.sql

set feedback 6;


更改後transportscript.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:\crm\initCRM.ora'

CREATE CONTROLFILE REUSE SET DATABASE "CRM" RESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 'e:\crm\redo01.log' SIZE 200M BLOCKSIZE 512,

GROUP 2 'e:\crm\redo02.log' SIZE 200M BLOCKSIZE 512,

GROUP 3 'e:\crm\redo03.log' SIZE 200M BLOCKSIZE 512,

GROUP 4 'e:\crm\redo04.log' SIZE 200M BLOCKSIZE 512

DATAFILE

'e:\crm\system01.dbf',

'e:\crm\sysaux01.dbf',

'e:\crm\zx.dbf',

'e:\crm\users01.dbf',

'e:\crm\pos.dbf',

'e:\crm\erp.dbf',

'e:\crm\user01.dbf',

'e:\crm\undotbs03.dbf',

'e:\crm\jxc.dbf',

'e:\crm\crm.dbf'

CHARACTER SET ZHS16GBK

;


-- Database can now be opened zeroing the online logs.

ALTER DATABASE OPEN RESETLOGS;


-- Commands to add tempfiles to temporary tablespaces.

-- Online tempfiles have complete space information.

-- Other tempfiles may require adjustment.

ALTER TABLESPACE TEMP ADD TEMPFILE 'e:\crm\temp01.dbf'

SIZE 20971520 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 PFILE='e:\crm\initCRM.ora'

@@ ?/rdbms/admin/utlirp.sql

SHUTDOWN IMMEDIATE

STARTUP PFILE='e:\crm\initCRM.ora'

-- The following step will recompile all PL/SQL modules.

-- It may take serveral hours to complete.

@@ ?/rdbms/admin/utlrp.sql

set feedback 6;


8 在目標平臺上執行transportscript.sql

創建一個oracle服務

C:\>oradim -new -sid CRM -startmode manual

實例已創建。

執行transportscript.sql


C:\Users\Administrator>set oracle_sid=CRM


C:\Users\Administrator>sqlplus / as sysdba


SQL*Plus: Release 11.2.0.2.0 Production on 星期五 11月 15 14:38:03 2013


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


已連接到空閒例程。


SQL> @e:\crm\transportscript.sql

ORACLE 例程已經啓動。


Total System Global Area 1252663296 bytes

Fixed Size 2252768 bytes

Variable Size 973078560 bytes

Database Buffers 268435456 bytes

Redo Buffers 8896512 bytes


控制文件已創建。

....................省略

....................省略

....................省略

....................省略


SQL> DROP function local_enquote_name;


函數已刪除。


SQL>

SQL> Rem =====================================================================

SQL> Rem Run component validation procedure

SQL> Rem =====================================================================

SQL>

SQL> EXECUTE dbms_registry_sys.validate_components;


PL/SQL 過程已成功完成。


SQL> SET serveroutput off

SQL>

SQL>

SQL> Rem =======================================================================

====

SQL> Rem END utlrp.sql

SQL> Rem =======================================================================

====

SQL> set feedback 6;

.......................................完.......................................

總結:數據庫遷移時,如果源平臺和目標平臺字節序相同的話,可以考慮用此方法遷移整個庫


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