源数据库:JSSWEB ,Oracle10.2.0.1 ,Windows 2003(32-bit)
目标数据库:JSSCON ,Oracle10.2.0.1 ,RHEL U2 (32-bit),已安装好数据库软件。
注:我知道,我明白,我理解,字节顺序相同,按照前面说的应该不需要使用CONVERT 转换的嘛!没错你说的对,我们这是演示,你别当真,更别糊涂,相同字节顺序是不需要convert,但convert database 例外的嘛。

一、启动数据库到read only状态
首先连接到源数据库。

E:\ORA10G>set oracle_sid=jssweb
E:\ORA10G>sqlplus "/ as sysdba"

启动到read only 状态

SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 113246208 bytes
Fixed Size 1247564 bytes
Variable Size 92276404 bytes
Database Buffers 12582912 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> alter database open read only;
数据库已更改。

二、检查数据库是否支持传输,主要检查平台

SQL> set serveroutput on
SQL> declare
2 db_ready boolean;
3 begin
4 db_ready := dbms_tdb.check_db('Linux IA (32-bit)');
5 end;
6 /
PL/SQL 过程已成功完成。

无输出,说明支持平台间转换,然后检查是否存在外部对象。

SQL> declare
2 external boolean;
3 begin
4 external := dbms_tdb.check_external;
5 end;
6 /
The following directories exist in the database:
SYS.DATA_PUMP_DIR

Sys 用户下有一个directory,记录下来。

三、执行CONVERT命令,假设我们希望在源平台执行转换操作。
首先连接到RMAN 管理器中。

E:\ora10g>rman target /

选择在源平台执行转换操作(注意下列中的加粗部分)

RMAN> convert database new database 'jsscon'
2> transport script 'e:\oratmp\script\ts.sql'
3> to platform 'Linux IA (32-bit)'
4> db_file_name_convert 'E:\ora10g\oradata\jssweb' 'e:\oratmp\oradata';
启动convert 于16-11 月-07
使用通道ORA_DISK_1
在数据库中找到目录SYS.DATA_PUMP_DIR
在口令文件中找到用户SYS (具有SYSDBA and SYSOPER 权限)
通道ORA_DISK_1: 启动数据文件转换
输入数据文件fno=00001 name=E:\ORA10G\ORADATA\JSSWEB\SYSTEM01.DBF
已转换的数据文件= E:\ORATMP\ORADATA\SYSTEM01.DBF
通道ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:25
通道ORA_DISK_1: 启动数据文件转换
输入数据文件fno=00002 name=E:\ORA10G\ORADATA\JSSWEB\UNDOTBS01.DBF
已转换的数据文件= E:\ORATMP\ORADATA\UNDOTBS01.DBF
通道ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:16
通道ORA_DISK_1: 启动数据文件转换
输入数据文件fno=00004 name=E:\ORA10G\ORADATA\JSSWEB\JSSWEB.DBF
已转换的数据文件= E:\ORATMP\ORADATA\JSSWEB.DBF
通道ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:15
通道ORA_DISK_1: 启动数据文件转换
输入数据文件fno=00003 name=E:\ORA10G\ORADATA\JSSWEB\SYSAUX01.DBF
已转换的数据文件= E:\ORATMP\ORADATA\SYSAUX01.DBF
通道ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:15
通道ORA_DISK_1: 启动数据文件转换
输入数据文件fno=00005 name=E:\ORA10G\ORADATA\JSSWEB\USERS01.DBF
已转换的数据文件= E:\ORATMP\ORADATA\USERS01.DBF
通道ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:03
在目标平台上运行SQL 脚本E:\ORATMP\SCRIPT\TS.SQL
以创建数据库
编辑init.ora 文件E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\INIT_00J16HQT_1_0.ORA。此PFILE 将用于在目标平台上创建数据库据
要重新编译所有PL/SQL 模块, 请在目标平台上运行utlirp.sql 和utlrp.sql
要更改内部数据库标识符, 请使用DBNEWID 实用程序
完成backup 于16-11 月-07

屏蔽输出中提供了二处脚本所在路径,记录下来。

四、复制文件到目标平台
复制源库中数据文件到目标平台,从上述屏蔽输出中看到共涉及E:\ORATMP\ORADATA\目录中5 个数据文件(临时表空间数据文件不需要转换,可以目标数据库重新创建),E:\ORATMP\SCRIPT 目录中的TS.SQL 脚本文件,以及E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\INIT_00J16HQT_1_0.ORA客户端初始化参数文件,复制到目标平台的适当位置,此处我们将复制到/opt/oratmp 目录中。

提示:数据文件复制完成后即可以将源数据库置为read-write 状态了。

创建相关目录:

[oracle@jsslinux oradata]$ mkdir /opt/ora10g/oradata/jsscon -p
[oracle@jsslinux oradata]$ mkdir /opt/ora10g/admin/jsscon -p
[oracle@jsslinux oradata]$ cd /opt/ora10g/admin/jsscon
[oracle@jsslinux jsscon]$ mkdir adump bdump cdump dpdump pfile udump

五、修改脚本文件和初始化参数文件
再次着重提示,oracle 生成的脚本文件,仅供参考有些参数还需要你自己手工调整,特别是文件复制到目标平台后,如果路径有变化,一定要记的修改脚本文件中对应的参数。

INIT_00J16HQT_1_0.ORA 为客户端初始化参数文件,需要注意其中db_name, xxx_dest,control_files 等参数,为便于输入,复制到目标平台时将其更新为inittmp.ora。

TS.SQL 为创建控制文件脚本,需要注意各数据文件路径。

六、执行脚本,创建数据库。
你可以打开脚本文件,按照语句手工一步步执行,也可以直接调用该脚本文件。此处我们是第一次执行,稳妥期间还是手工一步一步来吧:)))
首先指定SID(如果是windows 系统,就不只是export 这么简单了,还需要oradim 重建一个service,前面的文章有中具体示例,这里不详述了):

[oracle@jsslinux jsscon]$ export ORACLE_SID=jsscon
[oracle@jsslinux jsscon]$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on 星期五11 月16 11:10:07 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到空闲例程。

从客户端初始化参数文件启动到nomount 模式

SQL> STARTUP NOMOUNT PFILE='/opt/oratmp/scripts/INIT_00J14FQ2_1_0.ORA'
ORACLE 例程已经启动。
Total System Global Area 109051904 bytes
Fixed Size 1217980 bytes
Variable Size 92277316 bytes
Database Buffers 12582912 bytes
Redo Buffers 2973696 bytes

创建控制文件

SQL> CREATE CONTROLFILE REUSE SET DATABASE "JSSCON" RESETLOGS NOARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/opt/ora10g/oradata/jsscon/redo01.log' SIZE 20M,
9 GROUP 2 '/opt/ora10g/oradata/jsscon/redo02.log' SIZE 20M,
10 GROUP 3 '/opt/ora10g/oradata/jsscon/redo03.log' SIZE 20M
11 DATAFILE
12 '/opt/oratmp/oradata/SYSTEM01.DBF',
13 '/opt/oratmp/oradata/UNDOTBS01.DBF',
14 '/opt/oratmp/oradata/SYSAUX01.DBF',
15 '/opt/oratmp/oradata/JSSWEB.DBF',
16 '/opt/oratmp/oradata/USERS01.DBF'
17 CHARACTER SET ZHS16GBK
18 ;
控制文件已创建。

以resetlogs 模式打开数据库

SQL> ALTER DATABASE OPEN RESETLOGS;
数据库已更改。

创建临时表空间

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/opt/ora10g/oradata/jsscon/TEMP01.DBF' SIZE 200M;
表空间已更改。

注意:下面的操作就很关键了。

SQL> set echo off
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

启动到升级模式

SQL> STARTUP
UPGRADE
PFILE='/opt/oratmp/scripts/inittmp.ora'
ORACLE 例程已经启动。
Total System Global Area 109051904 bytes
Fixed Size 1217980 bytes
Variable Size 92277316 bytes
Database Buffers 12582912 bytes
Redo Buffers 2973696 bytes
数据库装载完毕。
数据库已经打开。

重新编译数据库对象。

SQL> @@?/rdbms/admin/utlirp.sql
....
....
DOC>#######################################################################
DOC>#######################################################################
DOC> utlirp.sql completed successfully. All PL/SQL objects in the
DOC> database have been invalidated.
DOC>
DOC> Shut down and restart the database in normal mode and run utlrp.sql to
DOC> recompile invalid objects.
DOC>#######################################################################
DOC>#######################################################################

如果这步执行出错,根据错误信息调试,解决之后重新执行。还好我这步正常执行了。

SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP PFILE='/opt/oratmp/scripts/inittmp.ora'
SQL> -- The following step will recompile all PL/SQL modules.
SQL> -- It may take serveral hours to complete.

下面执行重要的一步,重新编译无效对象,敲完回车你就该干嘛干嘛去吧,

SQL> @@?/rdbms/admin/utlrp.sql
...
...
SQL> DECLARE
2 threads pls_integer := &&1;
3 BEGIN
4 utl_recomp.recomp_parallel(threads);
5 END;
6 /
--执行到这步的时候需要耐心等待,人家已经提示你了,It may take serveral hours to complete。这期间不要以为死在这儿而乱敲键盘特别是回车之类命令键,极易导致执行出错。一直等到它提示提示END utlrp.sql。

Ok,传输成功,测试一下,看看数据是否正常。

SQL> conn jss/jss
已连接。
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
A
B
TMP5
BAK_PROJECT
EMP
HC_ORG
HC_PROJECT_ORG
HC_ORD_PROJECT
HC_PRODUCT
HC_ORD_PRODUCT
HC_ORD_PRODUCT_PACKAGE
HC_ORD_PRODUCT_PACKAGE_ITEM
HC_PROJECT_PRODUCT_CLASS
HC_PROJECT_PROD_CLASS_CONTENT
DEPT
已选择15 行。

哈哈,结果正确,结束了?都完了?虽然并非想学好来屋拍续集,但是大家一定要能够意识到,事情还远远没有结束。即使是做为一名准合格DBA,也要有细致,耐心,认真,负责,严谨,规范…(以下省略褒义形容词1000 个)的个性。

1、我们前面都是以客户端初始化参数文件启动,尚未创建服务器端初始化参数文件。

SQL> create spfile from pfile='/opt/oratmp/scripts/inittmp.ora';

通过执行以上语句创建spfile。

2、还记的dbms_tdb.check_external 函数提供的单子嘛,黑黑。对着单子一个个改吧。

SQL> CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS '/opt/ora10g/admin/jsscon/dpdump';

3、RMAN CONVERT DATABASE 命令并不会传输用户口令文件,手工执行创建。

SQL> host orapwd file=/opt/ora10g/product/10.2.0/db_1/dbs/orapwjsscon password=verysafe force=y

4、配置监听以及tnsnames。
好了,剩下的工作就不举例了,打扫战场吧,比如删除临时目录中的脚本文件等等。

Trackback

no comment untill now

Add your comment now

切换到手机版