对于跨平台的数据迁移,很多人都喜欢采用exp和imp的方式进行,操作起来比较简单,但是花费的时间较长,而且做全库导出的时候经常会大量报错。Transport Tablespace作为一种快速数据库迁移的方式已经被越来越多的dba使用,我本人就是这类方式的忠实粉丝。
下面是Windows到Linux平台的数据库迁移实例。
1. 将Windows平台数据库启动到mount状态,以只读模式打开
C:/Documents and Settings/Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 – Production on 星期六 4月 10 11:16:34 201
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
已连接到空闲例程。
SQL> startup mount
ORACLE 例程已经启动。Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 88081764 bytes
Database Buffers 75497472 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。SQL> alter database open read only;
数据库已更改。
2. 使用dbms_tdb包检测源平台和目标平台能否进行传输
SQL> declare
b boolean;
begin
b:= dbms_tdb.check_db(‘Linux IA (32-bit)’);
if b then dbms_output.put_line(‘Yes’);
else dbms_output.put_line(‘No’);
end if;
end;
/
YesPL/SQL procedure successfully completed.
3. 使用rman进行平台转换,并产生相应脚本
C:/Documents and Settings/Administrator>rman target /
恢复管理器: Release 10.2.0.1.0 – Production on 星期六 4月 10 11:17:35 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: DEVDB (DBID=618559467)
RMAN> convert database transport script ‘e:/createdb.sql’ to platform ‘Linux IA (32-bit)’ format ‘e:/test%U’;
启动 convert 于 10-4月 -10
使用通道 ORA_DISK_1在数据库中找到外部表 SH.SALES_TRANSACTIONS_EXT
在数据库中找到目录 SYS.ADMIN_DIR
在数据库中找到目录 SYS.WORK_DIR
在数据库中找到目录 SYS.DATA_FILE_DIR
在数据库中找到目录 SYS.LOG_FILE_DIR
在数据库中找到目录 SYS.MEDIA_DIR
在数据库中找到目录 SYS.XMLDIR
在数据库中找到目录 SYS.SUBDIR
在数据库中找到目录 SYS.DATA_PUMP_DIR在数据库中找到 BFILE PM.PRINT_MEDIA
在口令文件中找到用户 SYS (具有 SYSDBA and SYSOPER 权限)
通道 ORA_DISK_1: 启动数据文件转换
输入数据文件 fno=00001 name=+DATA/devdb/datafile/system.256.713829371
已转换的数据文件 = E:/TESTDATA_D-DEVDB_I-618559467_TS-SYSTEM_FNO-1_0CLAP6A7
通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:55
通道 ORA_DISK_1: 启动数据文件转换
输入数据文件 fno=00003 name=+DATA/devdb/datafile/sysaux.257.713829371
已转换的数据文件 = E:/TESTDATA_D-DEVDB_I-618559467_TS-SYSAUX_FNO-3_0DLAP6BU
通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:35
通道 ORA_DISK_1: 启动数据文件转换
输入数据文件 fno=00005 name=+DATA/devdb/datafile/example.265.713829537
已转换的数据文件 = E:/TESTDATA_D-DEVDB_I-618559467_TS-EXAMPLE_FNO-5_0ELAP6D1
通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:15
通道 ORA_DISK_1: 启动数据文件转换
输入数据文件 fno=00002 name=+DATA/devdb/datafile/undotbs1.258.713829371
已转换的数据文件 = E:/TESTDATA_D-DEVDB_I-618559467_TS-UNDOTBS1_FNO-2_0FLAP6DH
通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:03
通道 ORA_DISK_1: 启动数据文件转换
输入数据文件 fno=00004 name=+DATA/devdb/datafile/users.259.713829373
已转换的数据文件 = E:/TESTDATA_D-DEVDB_I-618559467_TS-USERS_FNO-4_0GLAP6DK
通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:01
在目标平台上运行 SQL 脚本 C:/3.SQL 以创建数据库
编辑 init.ora 文件 E:/INIT_TEST00LAP6A6_1_0.ORA。此 PFILE 将用于在目标平台上创建
数据库据
要重新编译所有 PL/SQL 模块, 请在目标平台上运行 utlirp.sql 和 utlrp.sql
要更改内部数据库标识符, 请使用 DBNEWID 实用程序
完成 backup 于 10-4月 -10RMAN> exit
恢复管理器完成。
C:/Documents and Settings/Administrator>
4. 拷贝数据文件、参数文件及产生的脚本至目标平台
5. 编辑参数文件及脚本文件
$ vi createdb.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 PERFORMANCESTARTUP NOMOUNT PFILE=’/u01/app/oracle/oradata/devdb/initdevdb.ora’
– Create SPFILE
CREATE SPFILE FROM PFILE = ‘/u01/app/oracle/oradata/devdb/initdevdb.ora’;STARTUP FORCE NOMOUNT
CREATE CONTROLFILE REUSE SET DATABASE “devdb” RESETLOGS ARCHIVELOG
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 32
MAXLOGHISTORY 292
LOGFILE
GROUP 1 SIZE 50M,
GROUP 2 SIZE 50M,
GROUP 3 SIZE 50M
DATAFILE
‘/u01/app/oracle/oradata/devdb/TESTDATA_D-DEVDB_I-618559467_TS-SYSTEM_FNO-1_0CLAP6A7′,
‘/u01/app/oracle/oradata/devdb/TESTDATA_D-DEVDB_I-618559467_TS-UNDOTBS1_FNO-2_0FLAP6DH’,
‘/u01/app/oracle/oradata/devdb/TESTDATA_D-DEVDB_I-618559467_TS-SYSAUX_FNO-3_0DLAP6BU’,
‘/u01/app/oracle/oradata/devdb/TESTDATA_D-DEVDB_I-618559467_TS-USERS_FNO-4_0GLAP6DK’,
‘/u01/app/oracle/oradata/devdb/TESTDATA_D-DEVDB_I-618559467_TS-EXAMPLE_FNO-5_0ELAP6D1′
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
SIZE 22020096 AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
– 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;
6. 执行脚本文件
SQL> @createdb.sql;