oracle64位导入oracle32位,ORACLE 从32位到64位的一次迁移

1 环境说明

A 机:192.168.1.184

操作系统:LINUX 32位

数据库:ORACLE 10G 32位

B机:192.168.1.183

操作系统:LINUX 64位

数据库:ORACLE 10G 64位

2 A机备份

备份脚本:

Run{

Allocate channel a1 type disk;

Allocate channel a2 type disk;

Sql’alter system switch logfile’

Backup full format=’/home/oracle/rman/FULL_%d_%T_%s’ database plus archivelog format=’/home/oracle/rman/arch_%d_%T_%s’;

Backup format=’/home/oracle/rman/ctl_%U’ current controlfile;

Release channel a2;

Release channel a1;

}

3 A机生成参数文件

Create pfile=’/home/oracle/rman/initdevdb.ora’ from spfile;

4 将备从文件和参数文件传至B机

Cd /home/oracle/rman

Scp * oracle@192.168.1.183:/home/oracle/rman

5 在B机对参数文件做相应的修改后启动到NOMOUNT状态

Export ORACLE_SID=devdb

Sqlplus / as sysdba

Startup nomount pfile=’/home/oracle/rman/initdevdb.ora’;

6 介质恢复

6.1 恢复控制文件

Rman target /

restore controlfile from ‘/home/oracle/rman/ctl_0hn2cdp1_1_1′;

6.2 启动到MOUNT 状态

Alter database mount;

6.3 介质恢复

Restore database;

Recover database;

在RECOVER DATABASE 时会报一个日志序列的错误:

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of recover command at 03/08/2012 01:47:31

RMAN-06054: media recovery requesting unknown log: thread 1 seq 5 lowscn 504551

解决办法:

run{

set until sequence 5;

recover database;

}

6.4 以resetlogs 方式打开

alter database open resetlogs;

database opened

RMAN-06900: WARNING: unable to generate V$RMAN_STATUS or V$RMAN_OUTPUT row

RMAN-06901: WARNING: disabling update of the V$RMAN_STATUS and V$RMAN_OUTPUT rows

ORACLE error from target database:

ORA-06553: PLS-801: internal error [56319]

因为数据库从32位到64位,会有很多无效对像出现,所以会出现以上错误。

解决办法:

在Target 端重新编译64位的PL/SQL模块

6.4.1 先重新启动到更新模式。

startup upgrade pfile=’/home/oracle/rman/initdevdb.ora’;

6.4.2 执行脚本:@$ORACLE_HOME/rdbms/admin/utlirp.sql

6.4.3 查询无效对象:

select count(*) from all_objects where status=’INVALID’;

COUNT(*)

―――-

6548

由以上可以看出无效对象。

6.4.4 创建SPFILE 并重新启动:

create spfile from pfile=’/home/oracle/rman/initdevdb.ora’;

File created.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup;

ORACLE instance started.

Total System Global Area 264241152 bytes

Fixed Size 2020024 bytes

Variable Size 100666696 bytes

Database Buffers 155189248 bytes

Redo Buffers 6365184 bytes

Database mounted.

Database opened.

6.4.5 执行编译脚本

@?/rdbms/admin/utlrp.sql;

在执行以下时会报03113错误。

DECLARE

2 threads pls_integer := &&1;

3 BEGIN

4 utl_recomp.recomp_parallel(threads);

5 END;

6 /

ERROR at line 1:

ORA-03113: end-of-file on communication channel

6.4.6 再次查询无效对象

select count(*) from all_objects where status=’INVALID’;

COUNT(*)

―――-

261

从以上数字可以看到比头一次查的要少很多了。

先放着,处理完Java在编译一次

重建 javashared data objects (SRO)

执行以下脚本:

begin

update obj$ set status=5 where obj#=(select obj# from obj$,javasnm$ where owner#=0 and type#=29 and short(+)=name and nvl(longdbcs,name)=’oracle/aurora/rdbms/Compiler’);

commit;

declare

cursor C1 is select ‘DROP JAVA DATA “‘ || u.name||’”.”‘ || o.name || ‘”‘ from obj$ o,user$ u where o.type#=56 and u.user#=o.owner#;

ddl_statement varchar2(200);

iterations number;

previous_iterations number;

loop_count number;

my_err number;

begin

previous_iterations := 10000000;

loop

select count(*) into iterations from obj$ where type#=56;

exit when iterations=0 or iterations >=previous_iterations;

previous_iterations := iterations;

loop_count := 0;

open C1;

loop

begin

fetch C1 into ddl_statement;

exit when C1%NOTFOUND or loop_count > iterations;

exception when others then

my_err := sqlcode;

if my_err = -1555 then �snapshot too old, re-execute fetch query

exit;

else

raise;

end if;

end;

initjvmaux.exec(ddl_statement);

loop_count := loop_count + 1;

end loop;

close C1;

end loop;

end;

commit;

initjvmaux.drp(‘delete from java$policy$shared$table’);

update obj$ set status=1 where obj#=(select obj# from obj$,javasnm$

where owner#=0 and type#=29 and short(+)=name and nvl(longdbcs,name)=’oracle/aurora/rdbms/Compiler’);

commit;

end;

/

重建命令:create or replace java system

/

6.4.7 再次重新编译无效对象

@?/rdbms/admin/utlrp.sql;

在执行脚本的过程中,session异常中断,在alert log和 trace里都有:ORA-7445的错误:

ORA-07445: exception encountered: core dump[__intel_new_memcpy()+2164] [SIGSEGV] [ADDR:0x7F2F0CBBD2BF] [PC:0x47ED7D4][Address not mapped to object] []

―� Current SQL Statement for thissession (sql_id=2y0pxmcj6k00t) ―�

ALTER VIEW”OLAPSYS”.”ALL$OLAP2_AW_CATALOGS” COMPILE

导致这个问题,是因为我们启动了OLAP,在32位转到64位时就会遇到这种错误。

7 处理OLAP问题

7.1 删除组件

@?/olap/admin/catnoamd.sql

@?/olap/admin/olapidrp.plb

@?/olap/admin/catnoxoq.sql

@?/olap/admin/catnoaps.sql

@?/olap/admin/cwm2drop.sql ―此脚本在11G的版本中用,在10G是不需要的。

@?/rdbms/admin/utlrp.sql

drop public synonym OlapFactView;

drop public synonym OlapDimView;

drop public synonym DBMS_ODM;

关闭数据库

7.2 添加OLAP组件

利用DBCA工具。

因为恢复的实例在DBCA中是看不到的,所以要做一些修改,修改如下:

devdb:/home/oracle/oracle/product/10.2.0/db_1:N

然后在图形化下启动DBCA, 选择 configure database option――�next――�next―――-选择OLAP(SYSAUX) ―-next ――finish

待重建完毕后,可再次查看无效对象:

select count(*) from all_objects where status=’INVALID’;

COUNT(*)―――-1此处的一个无效对像并不影响数据库的完整功能。 迁移完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值