ITPub博客

首页 > Linux操作系统 > Linux操作系统 > CONVERT DATABASE命令(三)

CONVERT DATABASE命令(三)

原创 Linux操作系统 作者:yangtingkun 时间:2009-07-23 22:58:01 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10426047