Oracle数据库升级前必要的准备工作

4,778 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,778
On SlideShare
0
From Embeds
0
Number of Embeds
2,632
Actions
Shares
0
Downloads
55
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Oracle数据库升级前必要的准备工作

  1. 1. Oracle 数据库升级前必要 的准备工作 by Maclean.liu liu.maclean@gmail.com www.oracledatabase12g.com
  2. 2. About Mel Email:liu.maclean@gmail.coml Blog:www.oracledatabase12g.coml Oracle Certified Database Administrator Master 10gand 11gl Over 6 years experience with Oracle DBA technologyl Over 7 years experience with Linux technologyl Member Independent Oracle Users Groupl Member All China Users Groupl Presents for advanced Oracle topics: RAC,DataGuard, Performance Tuning and Oracle Internal.
  3. 3. Oracle 数据库升级向来是一门纷繁复杂的工程,DBA 需要为产品数据库的升级耗费大量时间精力在准备工作上;因为其升级复杂度高,所以即便做了较为充分的准备仍可能在升级过程中遇到意想不到的问题,为了更高效地完成升级任务和减少停机时间,我们有必要为升级工作营造一种”舒适的”防御式的数据库”氛围”:1.为了保障升级后的数据库性能,我们有必要在升级前有效地收集数据库的性能统计信息,以便升级后若发生性能问题可以做出对比: • 为了保证性能统计信息真实有效,有必要在数据库升级前的一个月即开展收集工作 • 收集的性能统计信息应当尽可能的精确真实 • 在 Oracle 8i/9i 中使用 Statspack 性能报表,将快照级别设置为 6 或更高,设置快照间隔为 30 分钟, 在具体升级前将 perfstat 用户使用 exp 工具导出,参考 Metalink 文档 Note:466350.1 介绍了若何 对比升级前后的 Statspack 快照 • 在 Oracle 10g/11g 中使用 AWR 自动负载仓库性能报告,保证采集 30 天左右的快照,快照间隔最好为 30-60 分钟;之后可以使用 dbms_swrf_internal.awr_extract 存储过程将 AWR 导出到 dumpfile 文 件,在升级完成后载入这部分 AWR 信息,并可以使用 DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_HTML 函数对比升级前后的性能2.正式升级前的防御性措施: • 过多的审计信息可能会导致升级速度下降,可以在升级前将审计数据导出,并清理审计字典基表:截断 SYS.AUD$基表:SQL>TRUNCATE TABLE SYS.AUD$; • 同样的有必要清理 10g 后出现的回收站:清理 DBA 回收站:SQL>purge DBA_RECYCLEBIN;
  4. 4. • 移除一些”过期”的参数,设置这些参数的原因很有可能是为了修正原版本上的一些问题,例如我们都会 做的设置 event 参数;但在新版本中这些参数是否仍有必要设置是一个值得讨论的问题,当然你完全可 以就此事去提交一个 SR:这些"过期"参数可能包括:过老的如optimizer_features_enable=8.1.7.4,_always_semi_join=off,_unnest_subquery=false或者 event = "10061 trace name context forever, level 10",如此之类等等。 • 为数据库中的数据字典收集统计信息:在 Oracle 9i 中可以执行以下过程收集数据字典统计信息,SQL> exec DBMS_STATS.GATHER_SCHEMA_STATS (SYS, options => GATHER,estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => FOR ALL COLUMNS SIZE AUTO, cascade => TRUE);在 Oracle10g/11g 中收集字典统计信息可以由 GATHER_DICTIONARY_STATS 存储过程来完成:SQL> exec DBMS_STATS.GATHER_DICTIONARY_STATS; • 为策万全,我们有必要为回退数据库升级任务做好准备,10g 以前只能通过备份恢复来完成,10g 以后 我们可以利用闪回数据库的还原点特性来回退数据库,但需要注意以下几点: • 利用还原点要求数据库处于归档且打开 flashback database 的模式下 • 在特性仅在版本 10.2 之后可用 • 必须保证闪回回复区 flashback recovery area 有足够的磁盘空间 • 注意在升级后不要立即修改 compatible 参数,restore point 无法跨越 compatible 工作/* 首先我们在正式升级前创建一个有效的保证闪回数据库的还原点 */SQL> create restore point pre11gupgrd guarantee flashback database;Restore point created./* 确认以上 4 个注意后,我们可以大胆放心地实施升级工作了 */SQL> shutdown immediate;..............SQL> @?/rdbms/admin/catupgrd.sql
  5. 5. .............upgrade failed/* 在升级过程中出现了不可绕过的错误时,我们可能不得不回退数据库到还原点,也就是升级前*//* 关闭实例后,还原环境到 10g 下 */SQL> startup mount;/* 正式闪回到还原点 pre11gupgrd */SQL> flashback database to restore point pre11gupgrd;Flashback complete.SQL> alter database open;alter database open*ERROR at line 1:ORA-01589: must use RESETLOGS or NORESETLOGS option for database openSQL> alter database open resetlogs;/* 以 resetlogs 打开数据库 *//* 之后有必要删除这一个还原点 */SQL> select * from v$restore_point; SCN DATABASE_INCARNATION# GUA STORAGE_SIZE---------- --------------------- --- ------------TIME---------------------------------------------------------------------------NAME-------------------------------------------------------------------------------- 5081633 3 YES 1594163208-FEB-11 08.20.33.000000000 PMPRE11GUPGRDSQL> drop restore point pre11gupgrd;Restore point dropped.
  6. 6. • 下载最新版本的预升级检查脚本(pre-upgrade check script),如 utlu102i.sql / utlu111i.sql / utlu112i.sql;Metalink 文档 Note:884522.1 <How to Download and Run Oracle’s Database Pre-Upgrade Utility> 指出了各版本 utluxxx 脚本的下载地址/* 将升级信息 spool 到日志文件中 */SQL> SPOOL /tmp/UPGRADE/utlu112i.logSQL> @/tmp/UPGRADE/utlu112i.sql • 需要关注 SYS 和 SYSTEM 用户模式下的失效对象,有必要在升级前修复所有的失效对象:SELECT UNIQUE object_name, object_type, owner FROM dba_objectsWHERE status = INVALID; • 在升级完成后推荐执行 utlrp.sql 脚本以重新编译(Recompile)对象,从 11.1.0.7 开始升级前后的失效 对象将自动对比,执行?/rdbms/admin/utluiobj.sql 脚本可以列出对比信息,同时基表 registry$sys_inv_objs 和 registry$nonsys_inv_objs 分别列出了数据库中失效的 sys 或非 sys 对 象:SQL> select * from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionPL/SQL Release 11.2.0.1.0 - ProductionCORE 11.2.0.1.0 ProductionTNS for Linux: Version 11.2.0.1.0 - ProductionNLSRTL Version 11.2.0.1.0 - ProductionSQL> @?/rdbms/admin/utluiobj.sql.Oracle Database 11.1 Post-Upgrade Invalid Objects Tool 02-08-2011 22:23:22
  7. 7. .This tool lists post-upgrade invalid objects that were not invalidprior to upgrade (it ignores pre-existing pre-upgrade invalid objects)..Owner Object Name Object Type.SH FWEEK_PSCAT_SALES_MV MATERIALIZED VIEWPL/SQL procedure successfully completed.3.解决升级过程中失效的组件(component) • 确保该部分组件确实被 link 到目前的 Oracle 软件 2 进制可执行文件或库文件中 • 如果确认不会用到某些组件(component),想要通过手动彻底移除这部分组件(亦或者希望 reinstall 重 新安装这部分组件),那么可以参考以下文档:Note:472937.1 Information On Installed Database Components/SchemasNote.300056.1 Debug and Validate Invalid ObjectsNote:753041.1 How to diagnose Components with NON VALID statusNote.733667.1 How to Determine if XDB is Being Used in the Database?组件升级失败实例 1:数据库从 10.2 升级到 11.2,在 10g 的环境中 Database Vault 组件已经安装,Database Vault 组件在升级 relink 前被 turned off,在升级到 11.2 的过程中 XDB 组件升级失败;其原因在于安装或切换 Database Vault 将使得 XDB 组件失效,或者由 Bug 8942758 引起。解决方案是在升级前执行 utlrp.sql 脚本重新编译失效对象和组件,在此例中执行 utlrp.sql 可以使 XDB 组件valid.组件升级失败实例 2:数据库从 10.2.0.4 升级到 11.1.0.7,在升级过程中"ORACLE SERVER"组件失效;其原因在于 DMBS_SQLPA 包引用了某个不存在的列,该问题可以参考 metalink 文档 782735.1 和Notes:605317.1/736353.1。有效的解决方案是:1.在升级前将 SYS.PLAN_TABLE$基表或者同义词 PUBLIC.PLAN_TABLE DROP 掉2.若已执行了升级操作并遭遇了该问题,那么可以使用以下手段修复该问题:@catplan.sql -- recreate the plan table@dbmsxpln.sql -- reload dbms_xplan spec@prvtxpln.plb -- reload dbms_xplan implementation@prvtspao.plb -- reload dbms_sqlpaalter package SYS.DBMS_SUMADVISOR compile ;
  8. 8. alter package SYS.DBMS_SUMADVISOR compile body;4. 使用例如 AIX 上的 slibclean 等命令清理操作系统环境,在少数专有平台上不清理载入的共享库文件可能导致升级失败5.在执行 catupgrd.sql 脚本正式升级前打开 sqlplus 的 echo 输出,将升级过程中所有的输出信息转储到日志文件中:SQL> set echo onSQL> SPOOL /tmp/upgrade.logSQL> @catupgrd.sqlSQL> spool offDBUA 图形化升级工具默认使用 spool 和”echo”输出,这些日志可以在$ORACLE_HOME/cfgtoollogs/dbua//upgrade/目录下找到。© 2011, www.oracledatabase12g.com. 版权所有.文章允许转载,但必须以链接方式注明源地址,否则追求法律责任.

×