:08 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount pfile='/u02/app/oracle/product/11.2.0/db_1/dbs/initanqing.ora';
ORACLE instance started.
Total System Global Area 1402982400 bytes
Fixed Size 2228304 bytes
Variable Size 822087600 bytes
Database Buffers 570425344 bytes
Redo Buffers 8241152 bytes
SQL>
--重建控制文件:
SQL> CREATE CONTROLFILE REUSE DATABASE"ANQING" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
2 3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1'/u02/app/oracle/oradata/anqing/redo01.log' SIZE 50M BLOCKSIZE 512,
9 GROUP 2'/u02/app/oracle/oradata/anqing/redo02.log' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 '/u02/app/oracle/oradata/anqing/redo03.log' SIZE 50M BLOCKSIZE 512
11 --STANDBY LOGFILE
12 DATAFILE
13 '/u02/app/oracle/oradata/anqing/system01.dbf',
14 '/u02/app/oracle/oradata/anqing/sysaux01.dbf',
15 '/u02/app/oracle/oradata/anqing/undotbs01.dbf',
16 '/u02/app/oracle/oradata/anqing/users01.dbf'
17 CHARACTER SET ZHS16GBK
18 ;
Control file created.
--打开DB:
SQL> alter database open;
Database altered.
--尝试重建TEMP表空间,报错:
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE'/u02/app/oracle/oradata/anqing/temp01.dbf' SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
ALTER TABLESPACE TEMP ADD TEMPFILE'/u02/app/oracle/oradata/anqing/temp01.dbf' SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQLlevel 1
ORA-06553: PLS-801: internal error [56327]
--这里出错,是因为我们从32迁移到64位,还没有进行PL/SQL 模块的重建,等我们重建完成,在重建TEMP就没有问题了。
9. 在Target 端重新编译64位的PL/SQL模块
SQL> SPOOL mig32-64.log;
SQL> @$ORACLE_HOME/rdbms/admin/utlirp.sql
……
--脚本大概执行2分钟
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>###############################################################
SQL>
SQL> SPOOL OFF;
--这里说的很清楚,所有的PL/SQL 对象都变成了无效,需要shut down 后,用normal 默认启动,并执行utlrp.sql脚本,验证无效对象个数:
SQL> select count(*) from all_objectswhere status='INVALID';
COUNT(*)
----------
9768
--编译无效对象:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 1402982400 bytes
Fixed Size 2228304 bytes
Variable Size 822087600 bytes
Database Buffers 570425344 bytes
Redo Buffers 8241152 bytes
Database mounted.
Database opened.
SQL> @ /rdbms/admin/utlrp.sql;
--脚本执行半个小时
SQL> select count(*) from all_objectswhere status='INVALID';
COUNT(*)
----------
8054
--还是有很多无效对象,先放着,处理完Java在编译一次
10. 重建 javashared data objects (SRO)
用SYS 用户执行如下脚本:
begin
update obj$ set status=5 where obj#=(select obj# fromobj$,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 a