windows XP下 oracle10.2.0.4 升级到oracle11.2.0.1
来源:互联网 发布:云计算四种部署模式 编辑:程序博客网 时间:2024/05/16 14:23
此文章是承接上一篇 《windows XP oracle10.2.0.1 升级到oracle11.2.0.4》而做的升级。
在完全升级好之后的10.2.0.4 版本后
一、安装oracle11.2.0.1
不用多说。记得安装不同的目录下面。仅仅安装软件不安装数据库。
二、检查环境
1. 在升级之前,确保所有的组件和对象都是valid:
select substr(comp_name,1,40) comp_name, status, substr(version,1,10) version
from dba_registry order by comp_name;
select substr(object_name,1,40) object_name,substr(owner,1,15) owner,object_type from dba_objects where status='INVALID' order by owner,object_type; --针对对象
三、准备环境
拷贝以下文件。到你准备执行这个脚本
%ORACLE_HOME%/rdbms/admin/utlu112i.sql
sqlplus / as sysdba'
SQL> spool upgrade_info.log
SQL> @utlu112i.sql
SQL> spool off
SQL>
生成的upgrade_info.log里的内容很重要,后续步骤要根据该文件的内容做相应的修改,因此一定要保留下来。
四、
1.从下面这篇文档里可以下载到脚本dbupgdiag.sql:
Script. to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql) [ID 556610.1]
2.运行这个脚本:
cd <location of the script>
sqlplus / as sysdba
sql> alter session set nls_language='American';
sql> @dbupgdiag.sql
3.如果该脚本报告有invalid对象,运行以下命令重编译无效对象:
如果有返回结果,则:
如果有返回结果,则在升级之前,要保证Standby和Primary是处于同步的状态。
如果不是,则要用以下语句修改为SYSTEM:
如果不是,则要做相应的修改。
如果有,则在升级之后记得要做。
cd %ORACLE_HOME%/rdbms/admin
sqlplus / as sysdba
SQL> @utlrp.sql
4.注意事项connect角色。
从10.2开始,CONNECT角色的权限变少了,所以如果你是从10.2之前升级到11g的话,升级之后,需要重新授予缺少的权限,但是如果是从10.2及之后升级到11g的话,就不需要重新赋权限了,本例是从10.2.0.4升级到11g的,因此不需要该步骤。
5.检查国家字符集是否是UTF8或AL16UTF16:
如果是,则什么都不用做;如果不是,那你就惨了,跟着下面长长的这篇文档一步一步做吧:
The National Character Set ( NLS_NCHAR_CHARACTERSET ) in Oracle 9i, 10g and 11g [ID 276914.1]
select value from NLS_DATABASE_PARAMETERS where parameter = 'NLS_NCHAR_CHARACTERSET';
The National Character Set ( NLS_NCHAR_CHARACTERSET ) in Oracle 9i, 10g and 11g [ID 276914.1]
6.收集统计信息,以减少停机时间:
sqlplus /as sysdba
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
7.VAULT
如果你有开启Vault,那么你需要先在11gR2软件下禁用Vault,等升级结束后,再启用Vault,否则会在升级过程中报错。
8.使用以下语句生产分析数据字典的脚本 (as sysdba):
Set verify off
Set space 0
Set line 120
Set heading off
Set feedback off
Set pages 1000
Spool analyze.sql
SELECT 'Analyze cluster "'||cluster_name||'" validate structure cascade;'
FROM dba_clusters
WHERE owner='SYS'
UNION
SELECT 'Analyze table "'||table_name||'" validate structure cascade;'
FROM dba_tables
WHERE owner='SYS'
AND partitioned='NO'
AND (iot_type='IOT' OR iot_type is NULL)
UNION
SELECT 'Analyze table "'||table_name||'" validate structure cascade into invalid_rows;'
FROM dba_tables
WHERE owner='SYS'
AND partitioned='YES';
spool off
生成的脚本名称是:analyze.sql
现在运行该脚本:
上面语句没有返回结果才是正确的
现在运行该脚本:
sqlplus / as sysdba
SQL> @%ORACLE_HOME%/rdbms/admin/utlvalid.sql
SQL> @analyze.sql
9.确保当前没有文件需要介质恢复:
SELECT * FROM v$recover_file;
10.确保当前没有文件运行在备份模式下:
SELECT * FROM v$backup WHERE status != 'NOT ACTIVE';
上面语句没有返回结果才是正确的。
11.解决分布式事务。
先查询是否还有分布式事务:
SQL> select * from dba_2pc_pending;
SQL> SELECT local_tran_id
FROM dba_2pc_pending;
SQL> EXECUTE dbms_transaction.purge_lost_db_entry('');
SQL> COMMIT;
12.检查是否有Standby数据库存在:
SELECT SUBSTR(value,INSTR(value,'=',INSTR(UPPER(value),'SERVICE'))+1)
FROM v$parameter
WHERE name LIKE 'log_archive_dest%' AND UPPER(value) LIKE 'SERVICE%';
13.禁用所有的batch和cron jobs
14.确保用户SYS和SYSTEM的默认表空间都是SYSTEM:
SQL> SELECT username, default_tablespace
FROM dba_users
WHERE username in ('SYS','SYSTEM');
SQL> ALTER user SYS default tablespace SYSTEM;
SQL> ALTER user SYSTEM default tablespace SYSTEM;
15.确保AUD$表建在SYS用户下和SYSTEM表空间下:
SQL> SELECT owner,tablespace_name
FROM dba_tables
WHERE table_name='AUD$';
16.检查是否有外部认证的SSL用户:
SQL> SELECT name FROM sys.user$
WHERE ext_username IS NOT NULL
AND password = 'GLOBAL';
17.记下数据文件、联机日志文件和控制文件的位置:
SQL> SELECT name FROM v$controlfile;
SQL> SELECT file_name FROM dba_data_files;
SQL> SELECT group#, member FROM v$logfile;
18.停止listener:
停止其它可执行程序,如dbconsole, isqlplus等
接着开始跑升级脚本:
这个脚本大概持续1.5个小时,脚本的最后会自动关闭数据库。升级脚本跑完之后,再跑下面这个脚本,检查数据库状态:
如果该报告中包含错误,请查阅相关文档解决,直到没有错误之后,再跑下面的脚本:
前面的升级脚本是运行在upgrade模式下,该脚本主要是在open模式下做些升级动作,不需要花很多时间。
接着重新编译一下无效对象:
最后,再跑一下Step 3中的dbupgdiag.sql,确保数据库是好的。
lsnrctl stop
emctl stop dbconsole
isqlplusctl stop
19.关闭数据库:
接着对全库做个冷备。
sqlplus "/as sysdba"
SQL> shutdown immediate;
20.如果数据库原本是运行在archive模式下,最好先改为noarchive,这样可以减少升级停机时间,升级成功后再重新改回archive模式。
21.升级前的检查步骤基本上已经完成了,在跑升级脚本之前,需要把相关参数改为指向新的11g软件:
set ORACLE_HOME=<location of Oracle 11.2>
set PATH=%ORACLE_HOME%/bin:%PATH%
set ORACLE_BASE=<Oracle_Base set during installation>
22.前面所有的一切准备,都是为了这一步能成功执行,先把数据库起到upgrade状态:
cd %ORACLE_HOME%/rdbms/admin
sqlplus / as sysdba
SQL> startup UPGRADE
SQL> set echo on
SQL> SPOOL upgrade.log
SQL> @catupgrd.sql
SQL> spool off
sqlplus /as sysdba
SQL> STARTUP
SQL> @utlu112s.sql
SQL> @catuppst.sql
接着重新编译一下无效对象:
SQL> @utlrp.sql
升级之后的操作:
23.修改listener.ora,使listener执行新的11g Home,然后重新启动listener:
Actions For DST Updates When Upgrading To Or Applying The 11.2.0.2 Patchset [ID 1201253.1]
注意:11g的软件里已经自带了版本1-14的Timezone。
先检查一下当前timezone版本:
根据当前timezone的版本,又分三种情况:
1)等于14:这已经是11g需要的版本了,所以升级前后都不需要做任何事,这种情况很罕见。
2)高于14:升级前,必须得给11g软件打上该timezone版本的DST补丁,这种情况也很罕见。
3)低于14:大多数都是这种情况,在升级前不需要在11g软件层面打补丁,在升级后需要再数据库层面将Timezone升级至14,具体看后面的步骤
主要参考:Updating the RDBMS DST version in 11gR2 (11.2.0.1 and up) using DBMS_DST [ID 977512.1]
1)Timezone升级前的准备工作:
先检查一下当前的timezone版本:
一个典型的输出是:
然后开始准备工作:
接着检查准备状态:
一个典型的输出是:
下面的语句都不能有返回结果:
2)真正开始升级Timezone
一个典型的输出是:
重启数据库:
升级相关的table:
a
如果没有错误,则结束升级:
典型输出是:
lsnrctl start
24.Timezone数据库层面的升级。
检查Timezone版本,主要参考:Actions For DST Updates When Upgrading To Or Applying The 11.2.0.2 Patchset [ID 1201253.1]
注意:11g的软件里已经自带了版本1-14的Timezone。
先检查一下当前timezone版本:
SQL> conn / as sysdba
Connected.
SQL>SELECT version FROM v$timezone_file;
1)等于14:这已经是11g需要的版本了,所以升级前后都不需要做任何事,这种情况很罕见。
2)高于14:升级前,必须得给11g软件打上该timezone版本的DST补丁,这种情况也很罕见。
3)低于14:大多数都是这种情况,在升级前不需要在11g软件层面打补丁,在升级后需要再数据库层面将Timezone升级至14,具体看后面的步骤
主要参考:Updating the RDBMS DST version in 11gR2 (11.2.0.1 and up) using DBMS_DST [ID 977512.1]
1)Timezone升级前的准备工作:
先检查一下当前的timezone版本:
conn / as sysdba
SELECT version FROM v$timezone_file;
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE 'DST_%' ORDER BY PROPERTY_NAME;
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
alter session set "_with_subquery"=materialize;
exec DBMS_DST.BEGIN_PREPARE(14);
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 14
DST_UPGRADE_STATE PREPARE
-- truncate logging tables if they exist.
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_tables;
TRUNCATE TABLE sys.dst$error_table;
-- log affected data
set serveroutput on
BEGIN
DBMS_DST.FIND_AFFECTED_TABLES
(affected_tables => 'sys.dst$affected_tables',
log_errors => TRUE,
log_errors_table => 'sys.dst$error_table');
END;
/
SELECT * FROM sys.dst$affected_tables;
SELECT * FROM sys.dst$error_table;
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1883';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1878';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER not in ('1878','1883');
-- end prepare window, the rows above will stay in those tables.
EXEC DBMS_DST.END_PREPARE;
-- check if this is ended
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一个典型的输出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
2)真正开始升级Timezone
conn / as sysdba
shutdown immediate;
startup upgrade;
set serveroutput on
purge dba_recyclebin;
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_tables;
TRUNCATE TABLE sys.dst$error_table;
alter session set "_with_subquery"=materialize;
EXEC DBMS_DST.BEGIN_UPGRADE(14);
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 14
DST_SECONDARY_TT_VERSION 4
DST_UPGRADE_STATE UPGRADE
下面这条语句应该没有返回结果:
SELECT OWNER, TABLE_NAME, UPGRADE_IN_PROGRESS FROM ALL_TSTZ_TABLES where UPGRADE_IN_PROGRESS='YES';
shutdown immediate
startup
a
lter session set "_with_subquery"=materialize;
set serveroutput on
VAR numfail number
BEGIN
DBMS_DST.UPGRADE_DATABASE(:numfail,
parallel => TRUE,
log_errors => TRUE,
log_errors_table => 'SYS.DST$ERROR_TABLE',
log_triggers_table => 'SYS.DST$TRIGGER_TABLE',
error_on_overlap_time => FALSE,
error_on_nonexisting_time => FALSE);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :numfail);
END;
/
VAR fail number
BEGIN
DBMS_DST.END_UPGRADE(:fail);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :fail);
END;
/
最后一次检查:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 14
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
SELECT * FROM v$timezone_file;
FILENAME VERSION
-------------------- ----------
timezlrg_14.dat 14
0 0
- windows XP下 oracle10.2.0.4 升级到oracle11.2.0.1
- oracle10.2.0.1升级到oracle10.2.0.4
- oracle10.2.0.1升级到10.2.0.4oracle10.2.0.1升级到10.2.0.4(windows版本)
- linux下oracle11.2.0.1升级到11.2.0.4
- 升级oracle10.2.0.1 到oracle10.2.0.5.9
- ORACLE10.2.0.1升级到10.2.0.4
- Oracle10.2.0.4升级至Oracle11.2.0.3错误手记一则
- oracle10.2.0.1升级到10.2.0.4报错
- linux环境Oracle10.2.0.1到10.2.0.4的升级
- 【Oracle】ORACLE10.2.0.1升级升级ORACLE11G
- 64位Windows2003 Enterprise sp2 上64位Oracle10.2.0.1升级到Oracle10.2.0.3具体步骤
- oracle10.2.0.1.0升级到10.2.0.4.0
- 传输数据库升级Oracle11.2.0.3到Oracle12.2
- 实战:Oracle10.2.0.4异机迁移并升级到Oracle 11.2.0.4
- Windows XP SP2下的Oracle 9.2客户端连接RHEL5.1下的Oracle10.2服务器
- Oracle10.2.0.1RAC 升级 Oracle10.2.0.5案例分享 -CRS篇
- Oracle10.2.0.1RAC 升级 Oracle10.2.0.5案例分享 -DATABASE篇
- 【流水账--oracle生产库升级】在Centos7.0 下升级Oracle 11.2.0.1至Oracle11.2.0.4
- hdu2503
- poj1731 Orders (全排列)
- strcmp && strcpy && strlen && strcat 源码
- 南阳 242 计算球体积
- C#与C++、Java之比较概览
- windows XP下 oracle10.2.0.4 升级到oracle11.2.0.1
- HDU 1874 畅通工程续
- leetcode做题总结,题目Longest Valid Parentheses 2012/02/29
- AS3 实现读取本地数据
- apache访问权限与验证
- 二叉查找树的简单C++实现
- hdu a strang lift
- cocosbuilder源码编译
- hd 2070 Fibbonacci Number