10g升11g博客
更新时间:2024-06-24 14:13:01 阅读量: 综合文库 文档下载
- 10g和11g区别推荐度:
- 相关推荐
Oracle从10g升级到11g详细步骤
Oracle从10g升级到11g详细步骤数据库旧版本:10.2.0.4 数据库新版本:11.2.0.2 OS 版本: Solaris 10
参考文档:Complete Checklist for Manual Upgrades to 11gR2 [ID 837570.1] 第一部分 - 安装11gR2软件
这里对软件的安装就不详细说明了,可以参考相应的文档。
这里需要注意的是:如果你想在11gr2上打上最新的PSU或CPU,可以先在软件级别上打上PSU或CPU,这样就不用跑两次catbundle.sql,减少停机时间。 第二部分 - 初步检查
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; --针对对象
如果有invalid的对象,运行utlrp.sql重新编译对象。 2. 确保sys和system下没有重复的对象:
select object_name, object_type from dba_objects where
object_name||object_type in (select object_name||object_type from dba_objects where wner = 'SYS') and wner = 'SYSTEM'; 上面这条语句只能返回以下4条记录:
OBJECT_NAME OBJECT_TYPE ---------------------------------------- --------------- DBMS_REPCAT_AUTH PACKAGE BODY DBMS_REPCAT_AUTH PACKAGE AQ$_SCHEDULES_PRIMARY INDEX AQ$_SCHEDULES TABLE 如果有其它记录返回,则必须根据下面这篇文档把重复记录删除:
How to Clean Up Duplicate Objects Owned by SYS and SYSTEM Schema [ID 1030426.6] 第三部分 - 升级前工作 Step 1.
从11gR2的Oracle Home下拷贝以下文件至一个临时文件夹:(因为11g自带该脚本) cp $ORACLE11g_HOME/rdbms/admin/utlu112i.sql /tmp/. Step 2.
登陆10g数据库,运行: $ sqlplus '/ as sysdba' SQL> spool upgrade_info.log SQL> @/tmp/utlu112i.sql SQL> spool off SQL>
生成的upgrade_info.log里的内容很重要,后续步骤要根据该文件的内容做相应的修改,因此一定要保留下来。 Step 3.
从下面这篇文档里可以下载到脚本dbupgdiag.sql:
Script. to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql) [ID 556610.1] 运行这个脚本:
cd
sql> alter session set nls_language='American'; sql> @dbupgdiag.sql sql> exit
如果该脚本报告有invalid对象,运行以下命令重编译无效对象: $ cd $ORACLE_HOME/rdbms/admin $ sqlplus \SQL> @utlrp.sql Step 4.
从10.2开始,CONNECT角色的权限变少了,所以如果你是从10.2之前升级到11g的话,升级之后,需要重新授予缺少的权限,但是如果是从10.2及之后升级到11g的话,就不需要重新赋权限了,本例是从10.2.0.4升级到11g的,因此不需要该步骤。 Step 5.
生成重建dblink的脚本,以防万一数据库需要降级。和Step 4一样,本例是从10.2.0.4升级到11g的,因此不需要该步骤。 Step 6.
检查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(11g) Connected.
SQL>SELECT version FROM v$timezone_file; 根据当前timezone的版本,又分三种情况:
1)等于14:这已经是11g需要的版本了,所以升级前后都不需要做任何事,这种情况很罕见。 2)高于14:升级前,必须得给11g软件打上该timezone版本的DST补丁,这种情况也很罕见。 3)低于14:大多数都是这种情况,在升级前不需要在11g软件层面打补丁,在升级后需要再数据库层面将Timezone升级至14,具体看后面的步骤 Step 7.
检查国家字符集是否是UTF8或AL16UTF16:
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] Step 8.
收集统计信息,以减少停机时间: $ sqlplus \
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS; Step 9.
如果你有开启Vault,那么你需要先在11gR2软件下禁用Vault,等升级结束后,再启用Vault,否则会在升级过程中报错。
Step 10.
备份Enterprise Manager Database Control Data,因为本例并没有使用EM,所以不需要该步骤。
Step 11.
配置网络ACL's,在本例中不需要配置。
Step 12.
使用以下语句生产分析数据字典的脚本 (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 \FROM dba_clusters WHERE owner='SYS' UNION
SELECT 'Analyze table \FROM dba_tables WHERE owner='SYS' AND partitioned='NO'
AND (iot_type='IOT' OR iot_type is NULL) UNION
SELECT 'Analyze table \FROM dba_tables
WHERE owner='SYS' AND partitioned='YES';
spool off
生成的脚本名称是:analyze.sql 现在运行该脚本: $ sqlplus \
SQL> @$ORACLE_HOME/rdbms/admin/utlvalid.sql SQL> @analyze.sql
Step 13.
确保所有的snapshot都已被成功刷新,且replication已被关闭: SELECT DISTINCT(TRUNC(last_refresh)) FROM dba_snapshot_refresh_times;
Step 14.
确保当前没有文件需要介质恢复: SELECT * FROM v$recover_file; 上面语句没有返回结果才是正确的。
Step 15.
确保当前没有文件运行在备份模式下:
SELECT * FROM v$backup WHERE status != 'NOT ACTIVE'; 上面语句没有返回结果才是正确的。
Step 16. 解决分布式事务。
先查询是否还有分布式事务:
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;
Step 17.
检查是否有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%'; 如果有返回结果,则在升级之前,要保证Standby和Primary是处于同步的状态。
Step 18.
禁用所有的batch和cron jobs
Step 19.
确保用户SYS和SYSTEM的默认表空间都是SYSTEM: SQL> SELECT username, default_tablespace FROM dba_users
WHERE username in ('SYS','SYSTEM'); 如果不是,则要用以下语句修改为SYSTEM:
SQL> ALTER user SYS default tablespace SYSTEM; SQL> ALTER user SYSTEM default tablespace SYSTEM;
Step 20.
确保AUD$表建在SYS用户下和SYSTEM表空间下: SQL> SELECT owner,tablespace_name FROM dba_tables
WHERE table_name='AUD$'; 如果不是,则要做相应的修改。
Step 21.
检查是否有外部认证的SSL用户: SQL> SELECT name FROM sys.user$ WHERE ext_username IS NOT NULL AND password = 'GLOBAL'; 如果有,则在升级之后记得要做Step 34。
Step 22.
记下数据文件、联机日志文件和控制文件的位置: SQL> SELECT name FROM v$controlfile; SQL> SELECT file_name FROM dba_data_files; SQL> SELECT group#, member FROM v$logfile; 且备份listener.ora, tnsnames.ora, sqlnet.ora等文件。
Step 23. 停止listener: $ lsnrctl stop
停止其它可执行程序,如dbconsole, isqlplus等 $ emctl stop dbconsole $ isqlplusctl stop
Step 24. 关闭数据库:
$ sqlplus \SQL> shutdown immediate;
接着对全库做个冷备。
Step 25.
以10g的pfile为模板,并根据Step 2生成的upgrade_info.log里的建议,为11g创建一个新的pfile。
Step 26.
如果数据库原本是运行在archive模式下,最好先改为noarchive,这样可以减少升级停机时间,升级成功后再重新改回archive模式。
Step 27.
该步骤是针对Windows系统的,本例略过。
第四部分 - 升级
Step 28.
升级前的检查步骤基本上已经完成了,在跑升级脚本之前,需要把相关参数改为指向新的11g软件: $ export ORACLE_HOME=
$ export ORACLE_BASE=
接着修改oratab中的内容,使其指向新的11g Home目录: Sample /etc/oratab
#orcl:/opt/oracle/product/10.2/db_1:N orcl:/opt/oracle/product/11.2/db_1:N
Step 29.
前面所有的一切准备,都是为了这一步能成功执行,先把数据库起到upgrade状态: $ cd $ORACLE_HOME/rdbms/admin $ sqlplus \SQL> startup UPGRADE 接着开始跑升级脚本: SQL> set echo on SQL> SPOOL upgrade.log SQL> @catupgrd.sql SQL> spool off
这个脚本大概持续1.5个小时,脚本的最后会自动关闭数据库。升级脚本跑完之后,再跑下面这个脚本,检查数据库状态: $ sqlplus \SQL> STARTUP SQL> @utlu112s.sql
如果该报告中包含错误,请查阅相关文档解决,直到没有错误之后,再跑下面的脚本: SQL> @catuppst.sql
前面的升级脚本是运行在upgrade模式下,该脚本主要是在open模式下做些升级动作,不需要花很多时间。
接着重新编译一下无效对象: SQL> @utlrp.sql
最后,再跑一下Step 3中的dbupgdiag.sql,确保数据库是好的。
第五部分 - 升级后工作
Step 30.
修改listener.ora,使listener执行新的11g Home,然后重新启动listener: lsnrctl start
Step 31.
再次检查Step 28中设置的环境变量确实是指向了新的11g Home。
Step 32.
Timezone数据库层面的升级。
注意:该步骤是否执行是和Step 6中的检查结果相关的,只有当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 \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 \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
升级相关的table:
alter session set \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
Step 33. 该步骤可省略。
Step 34.
升级外部认证SSL用户。
由于本例是从10.2升级到11g,所以可忽略该步骤。
Step 35.
如果在Step 9中,你关闭了Vault,则必须在此步骤重新启用。
Note 453903.1- Enabling and Disabling Oracle Database Vault in UNIX
Step 36. 忽略
Step 37. 创建spfile:
SQL> create spfile from pfile;
Step 38.
锁住系统用户,可忽略。
Step 39.
升级Oracle Text,可忽略。
Step 40.
升级Oracle Clusterware,可忽略。
Step 41.
配置EM,可忽略。
最后,记得修改compatible参数:
SQL> ALTER SYSTEM SET COMPATIBLE = ’11.2.0’ SCOPE=SPFILE;
正在阅读:
10g升11g博客06-24
《外刊经贸知识选读》复习资料12-01
AO2011在财政预算执行审计中的运用09-24
2012年护士执业资格考试大纲04-16
儿科护理学(二)试卷06-02
求爱情书范文02-13
云政办发〔2010〕163号云南省人民政府办公厅关于转发云南省鼓励06-07
预备党员转正申请书的写法02-23
中小企业成本控制文献综述03-02
爱护小鸟作文400字07-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 博客
- 10g
- 11g
- 与太阳同行远足社会实践活动方案
- 2017年CPC系列变频恒压供水控制器说明书(word版本)
- 纳米比亚的土地和生物管理模式 - 图文
- 四年级课外经典阅读卷(二)
- 工程经济学课程设计 - 图文
- 辨析唐宋文人笔下的江南
- RKC温控器_CH-102_主要结构及功能
- 波兰尿素项目市场投资前景预测报告
- 第14届园丁杯秩序册
- 第一章 热力学第一定律习题
- Ytc2500定位器安装及操作说明书
- 哈维麦凯人脉66表格
- 航模入门常识
- 大方广佛华严经讲记12-17-027
- 杭州市萧山工业区给水工程设计
- (完整版)企业财务风险的分析与防范对策研究毕业设计
- 塑料台车项目可行性研究报告(发改立项备案+2013年最新案例范文
- 细胞生物学评价实验手册
- 高硫煤矸石综合利用处理方案 学位论文
- 《.NET开发基础》实验指导书 - 图文