数据库升级应急方案
通过对数据库初始化参数进行调整来对出现的故障或者性能问题进行处理。
_subquery_pruning_enabled
参数:_subquery_pruning_enabled
默认值:true
推荐值:false
动态修改:推荐在session修改
说明:enable the useof subquery predicates to perform pruning
解决问题:Bug 14469756:
执行“insert select”查询会花费大量时间生成执行计划,进行trace可以看到大量对TBL$OR$IDX$PART$NUM的等待。
解决办法:
1. alter session set"_optimizer_table_expansion"=false;
2.alter session set "_and_pruning_enabled"=false;
3.alter session set "_subquery_pruning_enabled"=false;
Bug 14458214:select复合分区表遇到ORA-1008
解决办法:
1. alter session set"_and_pruning_enabled"=false;
2.alter session set "_subquery_pruning_enabled"=false;
3.alter session set "_optimizer_table_expansion"=false;
Bug 15902104: 从 10.2.0.5 升级到 11.2.0.3 , merge 语句可能遇到 ORA-904 错误
解决办法:
_subquery_pruning_enabled=false
相关文档:14483460.8
Bug 15933188:当select中where两个char类型的列,但是长度不同,其中一个列为分区主键进行连接,将会得到错误结果。
解决办法:
alter session set"_subquery_pruning_enabled" = false;
相关文档:15933188.8
Bug 15933188:对包含本地分区表的分布式查询操作,远程数据库可能遇到ORA-600[qesmagetpamr-nullctx]也可能遇到未知错误,例如ORA-14091。
解决办法:
_subquery_pruning_enabled=FALSE
相关文档:12591399.8
Bug 13912192:当启用星形转换和分区修剪后可能会遇到ora-942
解决办法:
(1) set parallel_force_local=true to makeall parallel slaves run on the
same instance as the user session.
(2) set _subquery_pruning_enabled=false todisable subquery partition
pruning.
相关文档:13912192.8
adaptive_cursor_sharing相关参数
参数:_optimizer_adaptive_cursor_sharing
默认值:true
推荐值:FALSE
动态修改:是
说明:optimizeradaptive cursor sharing
参数:_optimizer_extended_cursor_sharing
默认值:true
推荐值:none
动态修改:是
说明:optimizerextended cursor sharing
参数:_optimizer_extended_cursor_sharing_rel
默认值:true
推荐值:none
动态修改:是
说明:optimizerextended cursor sharing for relational operators
解决问题:由于AdaptiveCursor Sharing(ACS)导致的bug,例如:Bug 13456573由于extendedcursor sharing导致多游标或者ORA-4031在分配KGLH0上。
Bug 14565911 由于ACS和柱状图,选择范围不准确。
Bug 14176247 由于ACS导致大量子游标,可能会看到大量cursor: pin S wait on X等待。
相关文档:13456573.8 14565911.8 14176247.8
_use_adaptive_log_file_sync
参数:_use_adaptive_log_file_sync
默认值:true
推荐值:false
动态修改:是,建议修改后重启
说明:Adaptivelyswitch between post/wait and polling
解决问题:Bug 13930580LGWR阻塞其他会话
In cases where a restart is not feasible,then you can set in memory and also in the SP file for when a restart doesoccur:
SQL> ALTER SYSTEM SET"_use_adaptive_log_file_sync"=FALSE; -- to set in memory
SQL> ALTER SYSTEM SET"_use_adaptive_log_file_sync"=FALSE scope=sfile sid='*'; -- to set onspfile, so parameter is used at next restart.
相关文档:1462942.1
_optimizer_join_factorization
参数:_optimizer_join_factorization
默认值:true
推荐值:false
动态修改是
说明:use joinfactorization transformation
解决问题:Bug 13984324类似UNION ALL操作得到错误结果
相关文档:13984324.8
_projection_pushdown
参数:_projection_pushdown
默认值:TRUE
推荐值:FALSE
动态修改:是
说明:projectionpushdown
解决问题:Bug 12974860 当数据库遇到 ORA-600[qkeIsExprReferenced1]报错时,很可能遇到这个bug,请通过调整这个参数尝试解决问题。
相关文档:12974860.8
_cursor_features_enabled
参数:_cursor_features_enabled
默认值:2
推荐值:514
动态修改:否
说明:Shared cursorfeatures enabled bits
解决问题:Bug 14601231ORA-7445 [kpughndlarr]或者其他ora-7445错误在堆栈kpoopq,也可能是Qnnn进程遇到ORA-600 [kghstack_alloc], [definehandles] / ORA-600[kponPurgeUnreachLoc-3]报错。
相关文档:14601231.8
_cursor_obsolete_threshold
参数:_cursor_obsolete_threshold
默认值:100
推荐值:根据情况设定
动态修改:否
说明:Number ofcursors per parent before obsoletion
解决问题:11.2.0.3中Oracle引入了_cursor_obsolete_threshold隐藏参数,默认为100,表示一个parentcursor最多可以有100个child cursor;如果SQL需要第101个child cursor,则将该parent cursor & its 100 childcursor设置为obsoleted,并且重新生成新的parent cursor. 但是那些过期的child cursor不会从v$sql中消失,dbms_shared_pool也无法将这些过期的child cursor flush出去,可以临时增加_cursor_obsolete_threshold来解决过期子游标无法age out的问题。
相关文档:296377.1
_memory_imm_mode_without_autosga
参数:_memory_imm_mode_without_autosga
默认值:true
推荐值:FALSE
动态修改:否
说明:Allowimmediate mode without sga/memory target
解决问题:当设置
memory_target = 0
sga_target = 0
仍旧会出现SGA内存调整,甚至导致ORA-4031等内存问题,通过设置这个参数可以避免这个问题。
相关文档:1269139.1
_optimizer_use_cbqt_star_transformation
参数:_optimizer_use_cbqt_star_transformation
默认值:true
推荐值:false
动态修改:是
说明:use rewrittenstar transformation using cbqt framework
解决问题:Bug 13384397错误结果或者ORA-600 [kkooqb:bsj not used].
相关文档:13384397.8
_external_scn_rejection_threshold_hours
参数:_external_scn_rejection_threshold_hours
默认值:24
推荐值:根据情况计算
动态修改:否
说明:Lag in hoursbetween max allowed SCN and an external SCN
解决问题:dblink报错ORA-19706,由于scn增长过快,为了防止scn快速增长导致数据库crash而设置_external_scn_rejection_threshold_hours参数,如果确实出现这个问题可以通过调整这个参数值,首先让应用可以正常运行
相关文档:1503937.1
以下参数为部分客户默认已修改参数
以下参数为客户已经修改的参数,以下罗列了设置这些参数的初衷,当数据库出现问题后,请检查这些参数是否为客户提供的设定值,并考虑这些参数是否对数据库产生了负面影响
_datafile_write_errors_crash_instance
参数: _datafile_write_errors_crash_instance
默认值: true
推荐值: true
动态修改:是
说明: datafile write errors crash instance
Oracle 推荐这个参数设置为 true ,但是当前设置为 false
存在问题: Bug 13745317 原本设置这个值是希望出现 IO 异常时不要 down 数据库,但是由于这个 bug ,可能虽然设置了这个参数,但是仍旧会 crash 实例。
相关文档: 13745317.8
deferred_segment_creation
参数:deferred_segment_creation
默认值:true
推荐值:FALSE
动态修改:是
说明:延时段创建,创建对象时不分配对应的段空间,当真正开始使用空间时才划分对应的段空间。
解决问题:exp-11
相关文档:1012307.6
默认客户已修改
parallel_force_local
参数:parallel_force_local
默认值:false
推荐值:true
动态修改:否
说明:并行执行操作是否可以跨界点执行,true表示只能在运行节点并行执行。
解决问题:Bug 11704376ORA-600 [15570]/执行结果错误
相关文档:11704376
默认客户已修改
_gc_policy_time
参数:_gc_policy_time
默认值:true
推荐值:false
动态修改:否
说明:how often tomake object policy decisions in minutes
解决问题:Bug 14588746ORA-600 [kjbmprlst:shadow] RAC环境LMS进程导致实例crash,通过Disable DRM解决。
如果在修改参数时遇到如下的问题:
SQL> alter system set"_gc_policy_time"=0 scope=spfile sid='*';
alter system set"_gc_policy_time"=0 scope=spfile sid='*'
*
ERROR at line 1:
ORA-00068: invalid value 0 for parameter_gc_policy_time, must be between 1 and
157320336
请执行下面的语句来关闭二进制检查的警告:
alter system set"_disable_image_check" = TRUE;
如果可以的话,请通过crsctl命令来重新启动数据库,看看这个警告是否还出现,然后再次尝试修改_gc_policy_time。
相关文档:14588746.8 390483.1
默认客户已修改
_optimizer_use_feedback
参数:_optimizer_use_feedback
默认值:true
推荐值:false
动态修改:是
说明:optimizer usefeedback
解决问题:Bug 13648166由于Feedback功能导致GROUP BY语句执行计划错误
相关文档:13648166.8
默认客户已修改
parallel_threads_per_cpu
参数:parallel_threads_per_cpu
默认值:根据操作系统而定 (通常为 2)
推荐值:各个节点的设置值相同
动态修改:是
说明:说明一个 CPU 在并行执行过程中可处理的进程或线程的数量, 并优化并行自适应算法和负载均衡算法。如果计算机在执行一个典型查询时有超负荷的迹象, 应减小该数值
解决问题:Bug 14016187 在RAC环境中,对gv$进行查询时由于parallel cursor未被共享而导致VERSION_COUNT在该节点很高。这个问题是由于parallel_threads_per_cpu在各个节点设置值不同导致,在该节点可能能看到:'cursor: mutexX'
相关文档:12974860.8
默认客户都设置为默认值
db_lost_write_protect
参数:db_lost_write_protect
默认值:enable
推荐值:NONE
动态修改:是
说明:它允许使用物理备用数据库检测由数据讹误的丢失写形式所导致的数据讹误
解决问题:Bug 13901039 遇到大量buffer busy waits等待
相关文档:13901039.8
默认客户都设置为默认值
sec_case_sensitive_logon
参数:sec_case_sensitive_logon
默认值:true
推荐值:false
动态修改:是
说明:密码是否区分大小写
解决问题:因为之前版本密码不区分大小写,为了方式出现问题,延续10g版本设置
相关文档:1306938.1
默认客户都设置为默认值
_optimizer_distinct_agg_transform
参数:_optimizer_distinct_agg_transform
默认值:true
推荐值:false
动态修改:是
说明:Transforms Distinct Aggregates to non-distinct aggregates
解决问题:Bug 12537316 当有merged子查询遇到ORA-600 / ORA-7445
相关文档:12537316.8
默认客户都设置为默认值
_enable_row_shipping
参数:_enable_row_shipping
默认值:true
推荐值:false
动态修改:是
说明:use the row shipping optimization for wide table selects
解决问题:Bug 14194525使用OCI7进行dblink查询遇到ORA-1455
相关文档:14194525.8
默认客户都设置为默认值
_add_col_optim_enabled
参数:_add_col_optim_enabled
默认值:true
推荐值:false
动态修改:是
说明:Allows new add column optimization
解决问题:Bug 14398795delete from table with add column optimization时遇到报错ORA-7445 [evakdustoopn]
相关文档:14398795.8
默认客户都设置为默认值
其他非默认设置参数说明
参数:event 10511 trace name context forever, level 1
说明:禁止SMON Offline空闲的rollback segment虽然11g版本对SMON进程的调用进行了优化,但是无法完全避免SMON的争用,通过设置这个参数可以减少由于SMON争用而导致的问题
参数:event 10736 trace name context forever, level 2
说明: disable pinned buffer history dump included in an errorstack dump 由于此设置仅是防止触发redo dump,通过保留这个参数可以防止相关问题的出现
参数:event 10949 TRACE NAME CONTEXT FOREVER
说明:解决大量'direct path read'等待问题文档793845.1
参数:_undo_autotune=FALSE
说明:关闭undo自动调整
参数:_gby_hash_aggregation_enabled=false
说明:关闭hash分组运算方式,保证分组运算可以排序,相关文档345048.1
参数:_gc_undo_affinity=FALSE
说明:和_gc_policy_time=0共同关闭DRM
参数:_optim_peek_user_binds=FALSE
说明:解决bug 12656350 ORA-07445[qksbgGetCursorVal()+77]问题
参数:_rollback_segment_count=2000
说明:此参数是设定回滚段的数量,在Oracle的相关内部信息中有提到在11.2.0.3版本在undo压力较大的情况下,通过加大这个参数值可以一定程度上提高性能
参数:result_cache_max_size=0
说明:关闭结果缓存功能
打PATCH故障处理说明
通过对GI软件或者RDBMS软件实施patch用以解决故障,本文以当前系统版本为11.2.0.3.3为基础版本进行分析。
Patch 14267798
基础版本:11.2.0.3.3/11.2.0.3.4
说明:
通过应用这个patch可以解决:
Document:13004894.8 Wrong results withSQL_TRACE / 10046
Document:13743357.8 Wrong results onfirst execution
11.2.0.3.6通过应用patch 16084707来修复这个问题。
Patch 14472647
基础版本:11.2.0.3.0-11.2.0.3.3
说明:
通过应用这个patch可以解决:
Document:14472647.8 Wrong results on IOTsecondary index after DML
此问题在11.2.0.3.6已修复
Patch 13705338
基础版本:11.2.0.3.0-11.2.0.3.3
说明:
通过应用这个patch可以解决:
Document:13705338.8Wrong results on iot secondary index through join
此问题在11.2.0.3.6已修复
Patch 14668670
基础版本:11.2.0.3.0-11.2.0.3.6
说明:
通过应用这个patch可以解决:
Document:14668670.8 Wrong results thefirst time a query is executed
11.2.0.3.6也需要应用这个patch来修复这个问题。
Patch 11072246
基础版本:11.2.0.3.0-11.2.0.3.6
说明:
通过应用这个patch可以解决:
Document:11072246.8 Poor Cardinalityestimations for columns with DESC indexes
11.2.0.3.6也需要应用这个patch来修复这个问题。
Patch 14644185
基础版本:11.2.0.3.3-11.2.0.3.5
说明:
通过应用这个patch可以解决:
Document:14644185.8 Part of fix 12531263missing from 11.2.0.3 - disabled deadlock detection for Cursor build locks (on$BUILD$)
此问题在11.2.0.3.6已修复
Patch 14110164
基础版本:11.2.0.3.2-11.2.0.3.6
说明:
通过应用这个patch可以解决:
Document:12412983.8 AIX: "asynchdescriptor resize" wait not necessary on AIX
Document:13400729.8 increased elapsedtime on "db file scattered read" in IBM AIX
11.2.0.3.6也需要应用这个patch来修复这个问题。
Patch 13947840
基础版本:11.2.0.3.0-11.2.0.3.6
说明:
通过应用这个patch可以解决:
Document:11689561.8 hash join consumesmore CPU in IBM AIX
Document:12596494.8 higher cpu usage inIBM AIX
11.2.0.3.6也需要应用这个patch来修复这个问题。
Patch 13443029
基础版本:11.2.0.3.0-11.2.0.3.6
说明:
通过应用这个patch可以解决:
Document: 13443029。8 AIX: Excess "work USLA heap" process memory use in 11.2 on AIX
更多详细信息可以阅读文档:1260095.1
11.2.0.3.6也需要应用这个patch来修复这个问题。
Patch 13498267
基础版本:11.2.0.3.0-11.2.0.3.3
说明:
通过应用这个patch可以解决:
Unpublished Bug 13498267 AIX-11202-CRS:HIGH CPU OVERHEAD OF AN "IDLE" RAC CLUSTER
更多详细信息可以阅读文档:1455973.1
此问题在11.2.0.3.6已修复
Patch 16056266
基础版本:11.2.0.3.0-11.2.0.3.5
说明:
该patch为11.2.0.3 PSU6,该patch中不仅包含了上面所罗列的某些bug,还包含了很多其他的bug,相比于PSU3,PSU6额外修复了如下bug:
Advance Queuing
Automatic Storage management
Buffer Cache Management
Enterprise Manager Database Control
Generic
High Availability
Oracle Security
Oracle Space management
Oracle Spatial
Oracle Streams
Oracle Transaction Management
Oracle Virtual Operating System Services
SQL*Net
PL/SQL
Server Manageability
Workspace Manager
Miscellaneous Issues
建议关注以下bug:
bug 13397104
遇到:
ora-600 [kjblpkeydrmqscchk:pkey]
ora-600 [kjbldrmrpst:pkey]
ora-600 [kjbrchkpkeywait:timeout]
导致数据库crash
Workaround:
disable read mostly locking via: _gc_read_mostly_locking=false
相关bug:14409183
bug 13250244
遇到:
共享池KGLHD内存泄漏。
可以看到共享池KGLHD越来越大或者ORA-4031,而且有多个共享池子池。
Workaround:
Set "_kghdsidx_count"=1
相关bug:13550185(也是由于多共享池子池导致)
bug 12873183
遇到:
使用rownum对分区表进行查询时,有可能返回错误的结果。
bug 13454210
遇到:
看到hang,有"library cache lock" 和"library cache load lock",堆栈信息中未看到kksfbc。
bug 14052474
遇到:
在join操作中有NULLIF的查询有可能得到错误的结果。
bug 13911821
遇到:
由于PMON进程导致实例crash,可能遇到报错ORA-7445 [kksLockDelete]或者ORA-4024。
bug 14226599
遇到:
打这个对应的patch可以减轻在dc_rollback_segments上的row cache latch,latch: row cache objects等待时间,尤其数据库有大量的undo segment。
bug 13377816
遇到:
ASM dia0进程占用大量内存
select ss.sid, p.pid, p.pname, sn.name,round(ss.value/(1024 *1024))||'Mb' "MegaBytes"
from v$sesstat ss, v$statname sn,v$session s, v$process p
where s.paddr = p.addr
and sn.statistic# = ss.statistic#
and s.sid = ss.sid
and sn.name in ('session pga memory' , 'session pga memory max')
and p.pname='DIA0'
order by ss.value
/
60 8 DIA0 session pgamemory 58Mb
60 8 DIA0 session pga memorymax 58Mb
After one day:
60 8 DIA0 session pga memorymax 898Mb
60 8 DIA0 session pgamemory 898Mb ====>> growth is about 840MB perday in this example
Workaround:
临时解决办法可以先kill一下dia0进程。
bug 13718279
遇到:
RAC中一个节点由于遇到ORA-29770错误而中断,类似如下报错
LMS8 (ospid: 2917) has not called a waitfor 93 secs.
Errors in file /.../xxx_lmhb_2927.trc
ORA-29770: global enqueue process LMS8 (OSID2917) is hung for more than 70 seconds
Incident details in: ...
ERROR:Some process(s) is not making progress.
Trace内内容
LMS8 (ospid: 1998) has not moved for 73sec (1329175625.1329175552)
kjfmGCR_HBCheckAll: LMS8 (ospid: 1998) has status 2
: waiting for event 'gcs remote message' for 0secs with wait_id 23404.
Workaround:
Set init.ora parameter _gc_defer_time to 3.
bug 12959852
遇到:
LMS进程报ORA-600[kjbrscping:slsend]进而导致实例crash。
bug 13399435
遇到:
由于'TIMEOUTin DRM FREEZE step' 或者'SYNCTIMEOUT while waiting for lmd'导致实例被驱逐。
相关bug:13732226与之类似
bug 14088346
遇到:
由于ORA-600[kjbrwrdone:sc3],LMS进程crash实例。
修改统计信息故障处理说明
很多故障都是由于某条或者某些执行计划错误变更而导致的性能问题,我们可以通过修改统计信息的方式来对执行计划进行调整。
统计信息迁移
当语句执行计划出现问题后,可以考虑尝试将原10g版本的统计信息导入到11g版本数据库中,尝试解决问题。
统计信息迁移步骤(以迁移test用户下a1表的统计信息为例,中间信息存储表为stat_history):
进行sql语句执行计划固化,进行固化之前,首先通过hint或者参数方式,找到目标sql语句最优的执行计划,假设目标sql语句的sql_id为6bcwxgty705p8,通过hint得到这个语句的目标执行计划hash值644658511,然后执行:
SQL> @coe_xfr_sql_profile.sql 6bcwxgty705p8 644658511
执行完成后,在执行的目录下生成文件:coe_xfr_sql_profile_6bcwxgty705p8_644658511.sql
然后运行这个脚本,即完成了sqlprofile创建。
最后通过DBA_SQL_PROFILES查询相关信息。
回退方案
Downgrade说明
Oracle支持对升级进行downgrade的,通过Downgrade可以将包括数据库及软件版本都回退到升级前的版本,数据库内的数据库不用额外进行恢复。
根据沟通,如果数据库未使用Oracle Database Vault,本文中不考虑Oracle Database Vault的影响。
约束条件
并不是所有的情况下都可以进行Downgrade,10g Release 2版本要求是10.2.0.2及以后版本进行升级,才可以进行Downgrade。
如果希望可以进行Downgrade,要求进行upgrade的时候不能修改数据库的COMPATIBLE参数,如果将这个参数修改为11.2.0.0以上版本,那么将不能进行Downgrade。
DB downgrade步骤
以下所写步骤请参考,请在实际环境中进行测试形成最终完整可操作文档。
1. DST修改,在进行upgrade的时候,使用DBMS_DST PL/SQL包更新了database time zone版本,那么需要恢复对应的版本,恢复方法为到MOS下载之前数据库版本在对应平台上的patch。
查询当前DST版本命令:
SELECT value$ FROM sys.props$ WHERE NAME = 'DST_PRIMARY_TT_VERSION';
2. 如果设置了ORA_TZFILE环境变量请去掉这个环境变量
3. 如果安装了Oracle Application Express,备份一个apxrelod.sql文件到到非Oracle目录下。
4. 如果有基于fixed objects创建的对象,后面删除这些对象时有可能遇到ORA-600错误,downgrade完成后可以重建这些对象。
5. 以Oracle用户登录系统
6. 停止所有节点的Enterprise Manager
9. 以downgrade模式启动数据库
SQL> STARTUP DOWNGRADE
10. 如果配置了Enterprise Manager,先删除sysman用户
DROPUSER sysman CASCADE;
12. 执行downgrade脚本
SQL> @catdwgrd.sql
该脚本需要在11g版本的环境下执行11g版本的脚本。如果有组件downgrade失败会显示ORA-39709报错,必须让所有组件downgrade都成功数据库downgrade才成功。
13. 停止日志记录
SQL> SPOOL OFF
14. 停止数据库并退出sqlplus
SQL>SHUTDOWN IMMEDIATE
SQL> EXIT
15. 修改ORACLE_HOME等环境变量到10g版本
16. 以sysdba使用sqlplus连接数据库
17. 以upgradee模式启动数据库
SQL> STARTUPUPGRADE
18. 制定日志路径
SQL> SPOOL reload.log
19. 执行catrelod.sql脚本
SQL> @catrelod.sql
Catrelod脚本将会重新在10g版本数据库中加载各个组件的适当版本。
20. 停止日志记录
SQL> SPOOLOFF
21. 停止数据库,修改参数CLUSTER_DATABASE为true并正常启动数据库。
22. 运行utlrp.sql脚本
SQL>@utlrp.sql
23. 修改集群内注册信息
$ srvctldowngrade database -d db-unique-name -o old_ORACLE_HOME -t to_relnum
clusterware downgrade步骤
GI downgrade支持从10.2.0.3到11.1.0.7升级到11.2.0.3版本后的downgrade。
1. 在非OCR node执行(OCR node指进行执行安装或者升级的节点,一般来说是1节点)
#$NEW_HOME/crs/install/rootcrs.pl -downgrade -force
2. 在OCR node执行:
#$NEW_HOME/crs/install/rootcrs.pl -downgrade -force -lastnode -oldcrshome$OLD_HOME -version $OLD_VERSION
3. 清理各个节点gpnp profile
rm -rf$NEW_HOME/gpnp/*
mkdir -p$NEW_HOME/gpnp/profiles/peer $NEW_HOME/gpnp/wallets/peer$NEW_HOME/gpnp/wallets/prdr $NEW_HOME/gpnp/wallets/pa$NEW_HOME/gpnp/wallets/root
4. 删除各个节点checkpoint file
rm -rf $ORACLE_BASE/Clusterware/ckptGridHA_${nodename}.xml
5. 检查各个节点oratab文件中asm是否指向旧版本位置
6. 启动旧版本集群软件
$OLD_HOME/bin/crsctlstart crs
7. 检查旧版本集群运行是否正常:
exportORACLE_HOME=$OLD_HOME
$OLD_HOME/bin/crsctlquery crs activeversion
$OLD_HOME/bin/crsctlquery crs softwareversion
$OLD_HOME/bin/crsctlcheck crs
$OLD_HOME/bin/crs_stat-t
$OLD_HOME/bin/crs_stat
$OLD_HOME/bin/oifcfgiflist -p -n
$OLD_HOME/bin/oifcfggetif
$OLD_HOME/bin/ocrcheck
cat/etc/oracle/ocr.loc /var/opt/oracle/ocr.loc
$OLD_HOME/bin/crsctlget css diagwait
$OLD_HOME/bin/srvctlconfig nodeapps -n `hostname | cut -d'.' -f1 | awk '{ print tolower($0); }'` -a
$OLD_HOME/OPatch/opatchlsinventory oh=$OLD_HOME
ifconfig ## location and exact syntax innote 1054902.1
unsetORACLE_HOME
8. 设置"CRS=true" for OLD_HOME
/ocw/grid/oui/bin/runInstaller-updateNodeList ORACLE_HOME="/ocw/grid" CRS=true
## ==>/ocw/grid is current clusterware home
方案评价
Downgrade方案虽然可以进行版本回退,但是在实际当中使用极少,某些企业对此进行了测试,但是当前Oracle ACS未发现国内大型企业客户有采用此种方式进行正式生产系统回退的先例。
这种方式的优点:
l 不占用升级时间,此操作只在确定需要回退是才开始执行
缺点
l 技术本身限制较多 ,包括COMPATIBLE参数不能升级,很多新功能无法使用
l 影响面大 ,不仅涉及到数据库,rdbms,甚至包括集群软件都需要downgrade,因为涉及到集群操作,有可能完成downgrade后无法恢复到原来运行的状态
l Downgrade时间长 ,具体时间需要进行详细测试之后才能确定,但是肯定以小时作为时间计量单位,另外完成downgrade后需要花费额外的时间来验证downgrade是成功的
l 操作复杂需要单独测试, 整个操作步骤很多,中间步骤出现问题进行处理难度将更大,所以此种方案必须进行多次多场景测试才可应用于生产环境。
l 风险度高 ,因为在决定downgrade的时候,仅有11g数据库内有最完整数据,此时如果downgrade出现数据问题,将会导致数据丢失
GoldenGate说明
由于本次升级,对于原有10g数据库不进行变更,那么如果在升级过程中或者校验时发现问题可以回退到原有10g版本数据库系统,对业务影响较小,但是如果校验成功,11g数据库连接应用对外服务后发现问题,由于有新的数据更新,已经无法回退连接到原有10g版本数据库系统,如果在11g版本数据库连接应用之前,可以实施Oracle GoldenGate,将连接应用后的数据变更同步到原有10g版本数据库,那么当运行一段时间后发现11g版本数据库存在问题,也可以切换回原有的10g版本数据库而没有数据丢失。
约束条件
要求11g版本的数据库打开归档,并且打开补充日志,建议开启force logging以防止隐患。
对于RAC环境11g数据库,GoldenGate的相关软件和工作目录需要配置在shared disk环境中,从而保证对所有node都是可用的,从任何一个node都可以启动GoldenGate的进程,当其中一个node出现异常时,可以在剩余的node启动而无须修改任何配置参数。
GoldenGate实施步骤
以下所写步骤请参考,正式实施前请进行测试形成正式文档。
1. 安装Oracle GoldenGate(以下简称OGG)(新系统指11g版本数据库,旧系统指10g版本数据库,以下对新旧系统都执行)
Grantsucceeded.
SYS@ora11g>archive log list;
Database logmode Archive Mode
Automaticarchival Enabled
。。。。。。
3. 检查日志记录要求(对新系统执行)
SQL>selectsupplemental_log_data_min from v$database;
结果为NO,表示没有打开附加日志。使用以下命令将数据库附加日志打开:
SQL>alterdatabase add supplemental log data;
切换日志以使附加日志生效:
SQL>ALTERSYSTEM ARCHIVE LOG CURRENT;
4. 建立OGG数据库用户(新旧系统执行)
OGG需要从数据字典读取表结构.OGG数据库用户权限:
CREATE USER goldengate IDENTIFIED BY goldengate DEFAULT TABLESPACE USERS ;
GRANT CONNECT TO goldengate;
GRANT CREATE SESSION TO goldengate;
GRANT ALTER SESSION TO goldengate;
GRANT RESOURCE TO goldengate;
GRANT SELECT ANY DICTIONARY TO goldengate;
GRANT SELECT ANY TABLE TO goldengate;
GRANT FLASHBACK ANY TABLE TO goldengate;
GRANT ALTER ANY TABLE TOgoldengate;
目标端根据需要再额外添加其他权限,例如需要对表做DML:
GRANT INSERT ANY TABLE TO goldengate;
GRANT UPDATE ANY TABLE TO goldengate;
GRANT DELETE ANY TABLE TO goldengate;
5. 在源端OGG命令行模式下为数据库表添加trandata(新系统执行)
a) GGSCI>DBLOGIN USERID xxxxx, PASSWORD xxx
b) GGSCI>ADD TRANDATA<owner>.<table>
6. 创建子目录,上传参数文件
a) 在安装目录下运行OGG命令行控制界面:
./Ggsci
b) 在OGG命令行界面下创建子目录:
GGSCI> create subdirs
c) 通过ftp上传参数文件mgr, ext*,dpe*到dirprm文件夹中,后面手工通过edit param <进程名>编辑也可。
7. 配置GOLDENGATE 相关进程
a) 配置mgr进程
GGSCI>edit param mgr
port 7809
--AUTORESTARTER *, RETRIES 3, WAITMINUTES 2, RESETMINUTES 60
--PURGEOLDEXTRACTS./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7
GGSCI>start mgr
Manager started.
b) 配置源端抽取进程
(注:从此步骤起,请定义自己的extract/data pump/replicat名称,以及exttrail和rmttrail名称。建议抽取日志的进程以extXX命名,在网络上传输数据的data pump进程以dpeXX格式命名,replicat以repXX格式命名;本地队列以./dirdat/tX命名,远程队列以./dirdat/rX命名。)
GGSCI>add ext extXX, tranlog, begin now
EXTRACT added.
GGSCI>add exttrail ./dirdat/tX, extextXX, megabytes 50
EXTTRAIL added.
GGSCI>edit param extXX
EXTRACT extXX
--setenv (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK )
USERID ogg,PASSWORD ogg
EXTTRAIL./dirdat/tX
dynamicresolution
tablesystem.custcardinfo1;
GGSCI>add ext dpeXX, exttrailsource./dirdat/tX
EXTRACT added.
GGSCI>add rmttrail ./dirdat/rX, extdpeXX, megabytes 50
RMTTRAIL added.
GGSCI>edit param dpeXX
extract dpeXX
--setenv (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK )
passthru
rmthost 旧系统IP,mgrport7809, compress
rmttrail./dirdat/rX
Dynamicresolution
table <owner>.*;
8. 启动源端进程
a) 启动源端抓取进程:
GGSCI>start er *
b) 查看源端进程状态:
GGSCI>info er *
RUNNING
RUNNING
注:若目标端mgr进程未启动,则该步骤无法启动dpe*进程,需等目标端mgr进程启动后再启动。
9. 配置Oracle数据库的目标进程
a) 配置目标端投递进程:
GGSCI>add rep repxx, exttrail ./dirdat/rX,nodbcheckpoint
b) 配置目标参数:
replicatrepXX
USERIDgoldengate, PASSWORD goldengate
--SETENV(NLS_LANG = "AMERICAN_AMERICA.ZHS16GBK")
SETENV(NLS_LANG = "SIMPLIFIED CHINESE_CHINA.ZHS16GBK")
reperrordefault, discard
discardfile./dirrpt/rp02.dsc, append, megabytes 50
grouptransops100
DDL includemapped
DDLERRORDEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5
DDLOPTIONSreport
MAP<owner>.*, TARGET <owner>.*;
c) 启动目标端投递进程:
GGSCI>start repXX
观察数据是否正确复制到目标端。
方案评价
使用Oracle GoldenGate作为回退方案,保证了再运行过程中存在一份在线数据备份,有效的保护了数据,所有的实施都在应用上线前进行实施,当出现问题时只需要恢复应用对数据库的指向即可。
这种方式的优点:
l 回退速度快操作简单,只需要进行应用数据库指向即可
l 存在在线数据备份,提升了数据安全
l 风险低,即使在OGG同步过程中出现问题,对运行的生产系统是没有直接影响的
缺点
l 需要额外购买软件 ,Oracle GoldenGate是单独产品,需要额外购买
l 安全风险 ,需要在新旧数据库分别创建数据库用户,加大安全风险
l 加长升级时间 ,由于要在应用连接数据库前启动OGG,所以OGG部署应该在UPGRADE之后,应用启动之前,这样就加大了应用停止时间
l 数据库直接性能影响, 由于推荐打开数据库的force logging,并且开启补充日志,所以将会增加数据库redo开销,影响数据库性能。
l 数据库间接性能影响 ,因为主机资源是固定的,虽然OGG可以限制内存的使用量,当存在大事务或者redo量很大时,有可能OGG会消耗较大量系统资源,从而对同样在主机上运行的数据库系统产生影响。[升级] 数据库升级到11g的应急方案
通过对数据库初始化参数进行调整来对出现的故障或者性能问题进行处理。
_subquery_pruning_enabled
参数:_subquery_pruning_enabled
默认值:true
推荐值:false
动态修改:推荐在session修改
说明:enable the useof subquery predicates to perform pruning
解决问题:Bug 14469756:
执行“insert select”查询会花费大量时间生成执行计划,进行trace可以看到大量对TBL$OR$IDX$PART$NUM的等待。
解决办法:
1. alter session set"_optimizer_table_expansion"=false;
2.alter session set "_and_pruning_enabled"=false;
3.alter session set "_subquery_pruning_enabled"=false;
Bug 14458214:select复合分区表遇到ORA-1008
解决办法:
1. alter session set"_and_pruning_enabled"=false;
2.alter session set "_subquery_pruning_enabled"=false;
3.alter session set "_optimizer_table_expansion"=false;
Bug 15902104: 从 10.2.0.5 升级到 11.2.0.3 , merge 语句可能遇到 ORA-904 错误
解决办法:
_subquery_pruning_enabled=false
相关文档:14483460.8
Bug 15933188:当select中where两个char类型的列,但是长度不同,其中一个列为分区主键进行连接,将会得到错误结果。
解决办法:
alter session set"_subquery_pruning_enabled" = false;
相关文档:15933188.8
Bug 15933188:对包含本地分区表的分布式查询操作,远程数据库可能遇到ORA-600[qesmagetpamr-nullctx]也可能遇到未知错误,例如ORA-14091。
解决办法:
_subquery_pruning_enabled=FALSE
相关文档:12591399.8
Bug 13912192:当启用星形转换和分区修剪后可能会遇到ora-942
解决办法:
(1) set parallel_force_local=true to makeall parallel slaves run on the
same instance as the user session.
(2) set _subquery_pruning_enabled=false todisable subquery partition
pruning.
相关文档:13912192.8
adaptive_cursor_sharing相关参数
参数:_optimizer_adaptive_cursor_sharing
默认值:true
推荐值:FALSE
动态修改:是
说明:optimizeradaptive cursor sharing
参数:_optimizer_extended_cursor_sharing
默认值:true
推荐值:none
动态修改:是
说明:optimizerextended cursor sharing
参数:_optimizer_extended_cursor_sharing_rel
默认值:true
推荐值:none
动态修改:是
说明:optimizerextended cursor sharing for relational operators
解决问题:由于AdaptiveCursor Sharing(ACS)导致的bug,例如:Bug 13456573由于extendedcursor sharing导致多游标或者ORA-4031在分配KGLH0上。
Bug 14565911 由于ACS和柱状图,选择范围不准确。
Bug 14176247 由于ACS导致大量子游标,可能会看到大量cursor: pin S wait on X等待。
相关文档:13456573.8 14565911.8 14176247.8
_use_adaptive_log_file_sync
参数:_use_adaptive_log_file_sync
默认值:true
推荐值:false
动态修改:是,建议修改后重启
说明:Adaptivelyswitch between post/wait and polling
解决问题:Bug 13930580LGWR阻塞其他会话
In cases where a restart is not feasible,then you can set in memory and also in the SP file for when a restart doesoccur:
SQL> ALTER SYSTEM SET"_use_adaptive_log_file_sync"=FALSE; -- to set in memory
SQL> ALTER SYSTEM SET"_use_adaptive_log_file_sync"=FALSE scope=sfile sid='*'; -- to set onspfile, so parameter is used at next restart.
相关文档:1462942.1
_optimizer_join_factorization
参数:_optimizer_join_factorization
默认值:true
推荐值:false
动态修改是
说明:use joinfactorization transformation
解决问题:Bug 13984324类似UNION ALL操作得到错误结果
相关文档:13984324.8
_projection_pushdown
参数:_projection_pushdown
默认值:TRUE
推荐值:FALSE
动态修改:是
说明:projectionpushdown
解决问题:Bug 12974860 当数据库遇到 ORA-600[qkeIsExprReferenced1]报错时,很可能遇到这个bug,请通过调整这个参数尝试解决问题。
相关文档:12974860.8
_cursor_features_enabled
参数:_cursor_features_enabled
默认值:2
推荐值:514
动态修改:否
说明:Shared cursorfeatures enabled bits
解决问题:Bug 14601231ORA-7445 [kpughndlarr]或者其他ora-7445错误在堆栈kpoopq,也可能是Qnnn进程遇到ORA-600 [kghstack_alloc], [definehandles] / ORA-600[kponPurgeUnreachLoc-3]报错。
相关文档:14601231.8
_cursor_obsolete_threshold
参数:_cursor_obsolete_threshold
默认值:100
推荐值:根据情况设定
动态修改:否
说明:Number ofcursors per parent before obsoletion
解决问题:11.2.0.3中Oracle引入了_cursor_obsolete_threshold隐藏参数,默认为100,表示一个parentcursor最多可以有100个child cursor;如果SQL需要第101个child cursor,则将该parent cursor & its 100 childcursor设置为obsoleted,并且重新生成新的parent cursor. 但是那些过期的child cursor不会从v$sql中消失,dbms_shared_pool也无法将这些过期的child cursor flush出去,可以临时增加_cursor_obsolete_threshold来解决过期子游标无法age out的问题。
相关文档:296377.1
_memory_imm_mode_without_autosga
参数:_memory_imm_mode_without_autosga
默认值:true
推荐值:FALSE
动态修改:否
说明:Allowimmediate mode without sga/memory target
解决问题:当设置
memory_target = 0
sga_target = 0
仍旧会出现SGA内存调整,甚至导致ORA-4031等内存问题,通过设置这个参数可以避免这个问题。
相关文档:1269139.1
_optimizer_use_cbqt_star_transformation
参数:_optimizer_use_cbqt_star_transformation
默认值:true
推荐值:false
动态修改:是
说明:use rewrittenstar transformation using cbqt framework
解决问题:Bug 13384397错误结果或者ORA-600 [kkooqb:bsj not used].
相关文档:13384397.8
_external_scn_rejection_threshold_hours
参数:_external_scn_rejection_threshold_hours
默认值:24
推荐值:根据情况计算
动态修改:否
说明:Lag in hoursbetween max allowed SCN and an external SCN
解决问题:dblink报错ORA-19706,由于scn增长过快,为了防止scn快速增长导致数据库crash而设置_external_scn_rejection_threshold_hours参数,如果确实出现这个问题可以通过调整这个参数值,首先让应用可以正常运行
相关文档:1503937.1
以下参数为部分客户默认已修改参数
以下参数为客户已经修改的参数,以下罗列了设置这些参数的初衷,当数据库出现问题后,请检查这些参数是否为客户提供的设定值,并考虑这些参数是否对数据库产生了负面影响
_datafile_write_errors_crash_instance
参数: _datafile_write_errors_crash_instance
默认值: true
推荐值: true
动态修改:是
说明: datafile write errors crash instance
Oracle 推荐这个参数设置为 true ,但是当前设置为 false
存在问题: Bug 13745317 原本设置这个值是希望出现 IO 异常时不要 down 数据库,但是由于这个 bug ,可能虽然设置了这个参数,但是仍旧会 crash 实例。
相关文档: 13745317.8
deferred_segment_creation
参数:deferred_segment_creation
默认值:true
推荐值:FALSE
动态修改:是
说明:延时段创建,创建对象时不分配对应的段空间,当真正开始使用空间时才划分对应的段空间。
解决问题:exp-11
相关文档:1012307.6
默认客户已修改
parallel_force_local
参数:parallel_force_local
默认值:false
推荐值:true
动态修改:否
说明:并行执行操作是否可以跨界点执行,true表示只能在运行节点并行执行。
解决问题:Bug 11704376ORA-600 [15570]/执行结果错误
相关文档:11704376
默认客户已修改
_gc_policy_time
参数:_gc_policy_time
默认值:true
推荐值:false
动态修改:否
说明:how often tomake object policy decisions in minutes
解决问题:Bug 14588746ORA-600 [kjbmprlst:shadow] RAC环境LMS进程导致实例crash,通过Disable DRM解决。
如果在修改参数时遇到如下的问题:
SQL> alter system set"_gc_policy_time"=0 scope=spfile sid='*';
alter system set"_gc_policy_time"=0 scope=spfile sid='*'
*
ERROR at line 1:
ORA-00068: invalid value 0 for parameter_gc_policy_time, must be between 1 and
157320336
请执行下面的语句来关闭二进制检查的警告:
alter system set"_disable_image_check" = TRUE;
如果可以的话,请通过crsctl命令来重新启动数据库,看看这个警告是否还出现,然后再次尝试修改_gc_policy_time。
相关文档:14588746.8 390483.1
默认客户已修改
_optimizer_use_feedback
参数:_optimizer_use_feedback
默认值:true
推荐值:false
动态修改:是
说明:optimizer usefeedback
解决问题:Bug 13648166由于Feedback功能导致GROUP BY语句执行计划错误
相关文档:13648166.8
默认客户已修改
parallel_threads_per_cpu
参数:parallel_threads_per_cpu
默认值:根据操作系统而定 (通常为 2)
推荐值:各个节点的设置值相同
动态修改:是
说明:说明一个 CPU 在并行执行过程中可处理的进程或线程的数量, 并优化并行自适应算法和负载均衡算法。如果计算机在执行一个典型查询时有超负荷的迹象, 应减小该数值
解决问题:Bug 14016187 在RAC环境中,对gv$进行查询时由于parallel cursor未被共享而导致VERSION_COUNT在该节点很高。这个问题是由于parallel_threads_per_cpu在各个节点设置值不同导致,在该节点可能能看到:'cursor: mutexX'
相关文档:12974860.8
默认客户都设置为默认值
db_lost_write_protect
参数:db_lost_write_protect
默认值:enable
推荐值:NONE
动态修改:是
说明:它允许使用物理备用数据库检测由数据讹误的丢失写形式所导致的数据讹误
解决问题:Bug 13901039 遇到大量buffer busy waits等待
相关文档:13901039.8
默认客户都设置为默认值
sec_case_sensitive_logon
参数:sec_case_sensitive_logon
默认值:true
推荐值:false
动态修改:是
说明:密码是否区分大小写
解决问题:因为之前版本密码不区分大小写,为了方式出现问题,延续10g版本设置
相关文档:1306938.1
默认客户都设置为默认值
_optimizer_distinct_agg_transform
参数:_optimizer_distinct_agg_transform
默认值:true
推荐值:false
动态修改:是
说明:Transforms Distinct Aggregates to non-distinct aggregates
解决问题:Bug 12537316 当有merged子查询遇到ORA-600 / ORA-7445
相关文档:12537316.8
默认客户都设置为默认值
_enable_row_shipping
参数:_enable_row_shipping
默认值:true
推荐值:false
动态修改:是
说明:use the row shipping optimization for wide table selects
解决问题:Bug 14194525使用OCI7进行dblink查询遇到ORA-1455
相关文档:14194525.8
默认客户都设置为默认值
_add_col_optim_enabled
参数:_add_col_optim_enabled
默认值:true
推荐值:false
动态修改:是
说明:Allows new add column optimization
解决问题:Bug 14398795delete from table with add column optimization时遇到报错ORA-7445 [evakdustoopn]
相关文档:14398795.8
默认客户都设置为默认值
其他非默认设置参数说明
参数:event 10511 trace name context forever, level 1
说明:禁止SMON Offline空闲的rollback segment虽然11g版本对SMON进程的调用进行了优化,但是无法完全避免SMON的争用,通过设置这个参数可以减少由于SMON争用而导致的问题
参数:event 10736 trace name context forever, level 2
说明: disable pinned buffer history dump included in an errorstack dump 由于此设置仅是防止触发redo dump,通过保留这个参数可以防止相关问题的出现
参数:event 10949 TRACE NAME CONTEXT FOREVER
说明:解决大量'direct path read'等待问题文档793845.1
参数:_undo_autotune=FALSE
说明:关闭undo自动调整
参数:_gby_hash_aggregation_enabled=false
说明:关闭hash分组运算方式,保证分组运算可以排序,相关文档345048.1
参数:_gc_undo_affinity=FALSE
说明:和_gc_policy_time=0共同关闭DRM
参数:_optim_peek_user_binds=FALSE
说明:解决bug 12656350 ORA-07445[qksbgGetCursorVal()+77]问题
参数:_rollback_segment_count=2000
说明:此参数是设定回滚段的数量,在Oracle的相关内部信息中有提到在11.2.0.3版本在undo压力较大的情况下,通过加大这个参数值可以一定程度上提高性能
参数:result_cache_max_size=0
说明:关闭结果缓存功能
打PATCH故障处理说明
通过对GI软件或者RDBMS软件实施patch用以解决故障,本文以当前系统版本为11.2.0.3.3为基础版本进行分析。
Patch 14267798
基础版本:11.2.0.3.3/11.2.0.3.4
说明:
通过应用这个patch可以解决:
Document:13004894.8 Wrong results withSQL_TRACE / 10046
Document:13743357.8 Wrong results onfirst execution
11.2.0.3.6通过应用patch 16084707来修复这个问题。
Patch 14472647
基础版本:11.2.0.3.0-11.2.0.3.3
说明:
通过应用这个patch可以解决:
Document:14472647.8 Wrong results on IOTsecondary index after DML
此问题在11.2.0.3.6已修复
Patch 13705338
基础版本:11.2.0.3.0-11.2.0.3.3
说明:
通过应用这个patch可以解决:
Document:13705338.8Wrong results on iot secondary index through join
此问题在11.2.0.3.6已修复
Patch 14668670
基础版本:11.2.0.3.0-11.2.0.3.6
说明:
通过应用这个patch可以解决:
Document:14668670.8 Wrong results thefirst time a query is executed
11.2.0.3.6也需要应用这个patch来修复这个问题。
Patch 11072246
基础版本:11.2.0.3.0-11.2.0.3.6
说明:
通过应用这个patch可以解决:
Document:11072246.8 Poor Cardinalityestimations for columns with DESC indexes
11.2.0.3.6也需要应用这个patch来修复这个问题。
Patch 14644185
基础版本:11.2.0.3.3-11.2.0.3.5
说明:
通过应用这个patch可以解决:
Document:14644185.8 Part of fix 12531263missing from 11.2.0.3 - disabled deadlock detection for Cursor build locks (on$BUILD$)
此问题在11.2.0.3.6已修复
Patch 14110164
基础版本:11.2.0.3.2-11.2.0.3.6
说明:
通过应用这个patch可以解决:
Document:12412983.8 AIX: "asynchdescriptor resize" wait not necessary on AIX
Document:13400729.8 increased elapsedtime on "db file scattered read" in IBM AIX
11.2.0.3.6也需要应用这个patch来修复这个问题。
Patch 13947840
基础版本:11.2.0.3.0-11.2.0.3.6
说明:
通过应用这个patch可以解决:
Document:11689561.8 hash join consumesmore CPU in IBM AIX
Document:12596494.8 higher cpu usage inIBM AIX
11.2.0.3.6也需要应用这个patch来修复这个问题。
Patch 13443029
基础版本:11.2.0.3.0-11.2.0.3.6
说明:
通过应用这个patch可以解决:
Document: 13443029。8 AIX: Excess "work USLA heap" process memory use in 11.2 on AIX
更多详细信息可以阅读文档:1260095.1
11.2.0.3.6也需要应用这个patch来修复这个问题。
Patch 13498267
基础版本:11.2.0.3.0-11.2.0.3.3
说明:
通过应用这个patch可以解决:
Unpublished Bug 13498267 AIX-11202-CRS:HIGH CPU OVERHEAD OF AN "IDLE" RAC CLUSTER
更多详细信息可以阅读文档:1455973.1
此问题在11.2.0.3.6已修复
Patch 16056266
基础版本:11.2.0.3.0-11.2.0.3.5
说明:
该patch为11.2.0.3 PSU6,该patch中不仅包含了上面所罗列的某些bug,还包含了很多其他的bug,相比于PSU3,PSU6额外修复了如下bug:
Advance Queuing
13484963 | ORA-3146 from AQ propogation from 11.2.0.3 to 11.2.0.2 |
Automatic Storage management
13476583 | After rebalance a disk goes offline in multi-node ASM |
12857027 | Drop directory in asmcmd fails with ORA-600[kfaDelTree00] |
13448206 | Many alert messages "NOTE: attempting voting file .." in RAC with ASM |
13559697 | Integrate ASM with OAK lib |
16231699 | Adding a new disk on ODA appliance hits ORA-600 [kfgpset3] |
16299830 | ORA-15072 from CREATE DISKGROUP on ODA |
16382353 | Query against v$asm_attribute produces ORA-600 [kfexvContentCb0] |
Buffer Cache Management
13397104 | Instance crash with ORA-600 [kjblpkeydrmqscchk:pkey] or similar - superseded |
14409183 | ORA-600 [kjblpkeydrmqscchk:pkey] or similar / session hangs on "gc buffer busy acquire" |
13038684 | Per process Async IO Max limit is reached very quickly in processes |
13534412 | ORA-600 [kclchkblkdma_3] can occur in RAC crashing the instance |
13807411 | ORA-600 [kcbchg1_38] using XA in RAC |
13098318 | ORA-600 [6856] on interrupt / kill using a global temporary table |
Enterprise Manager Database Control
14023636 | Fix for bug 14023636 |
14205448 | Fix for bug 14205448 |
14258925 | Fix for bug 14258925 |
14262913 | Fix for bug 14262913 |
14263036 | Fix for bug 14263036 |
14263073 | Fix for bug 14263073 |
14469008 | Fix for bug 14469008 |
14546575 | Fix for bug 14546575 |
14546638 | Fix for bug 14546638 |
14546673 | Fix for bug 14546673 |
14273397 | Fix for bug 14273397 |
14459552 | Fix for bug 14459552 |
Generic
12693626 | High CPU use for select on INTERVAL partitioned table |
12971775 | OERI:[ktsircinfo_num1] with concurrent parallel DML and online index creation |
13059165 | UTLRP does not report the correct number of "OBJECTS WITH ERRORS" |
13080778 | ORA-942 / ORA-1031 / corruption for SQL using same object name in multiple schemas - superseded |
13099577 | ORA-1460 with parallel query |
13250244 | Shared pool leak of "KGLHD" memory when using multiple subpools |
13358781 | dba_hist_sqlstat.ccwait_delta is zero always |
13384182 | ORA-600 [delrow:iot1] from DELETE or MERGE..DELETE with an IOT |
13550185+ | Hang / SGA memory corruption / ORA-7445 [kglic0] when using multiple shared pool subpools |
13566938 | ORA-600 [kcbgtcr_1] on update of reference partitioned table |
13572659 | DBMS_REDEFINITION disables Foreign Keys used for REFERENCE partitioning |
13705338 | Wrong results / ORA-7445 on IOT secondary index |
14076523 | ORA-600 [kgxRelease-bad-holder] can occur in rare cases |
14613900 | ORA-7445 [kkscsSearchChildList] with fix of bug 12976376 present – superseded |
10263668 | ORA-600 [kokegPinLob1] selecting a CLOB |
12345082 | ORA-600 [kkzgbtcols] creating materialized view on table with Object / UROWID / BFILE types |
12791981 | ORA-4030 due to "KGL Iterator information" |
12873183 | Wrong results from query with ROWNUM on partitioned table |
12964067 | DBMS_REDEFINITION fails with ORA-600 [kkzucmvl_ChkMVLog: kkzlglnm] |
13011409 | ORA-600 [kglLock-bad-byd] can occur |
13026410 | Select against V$ACCESS / V$OPEN_CURSORS fails with ORA-4029 |
13454210 | BUILD lock is not released on error ('library cache lock' waits) |
13524899 | Creation of Cursor-Duration in-memory temporary table produces too much recursive SQL |
13645875 | ORA-7445[qerixFetchFastFullScan] on update of IOT with secondary index |
13719081 | Upgrade invalidate of views is slow in utlrvw.sql |
13936424 | SELECT FOR UPDATE not returning values for added column with NOT NULL and default value |
14040433 | Cursors not shared due to DIFF_CALL_DURN even though they should share |
14052474 | Wrong Results with NULLIF using constants in JOINs |
8547978 | Online redefinition corrupts dictionary / ORA-600[kqd-objerror$] from DROP USER |
10242202 | ora-22992 when creating materialized view with remote lob column |
13496884 | ORA-600 [qcsfbdnp:1] from Merge Statement with Bind Variables |
13582702 | ORA-600 [kkmmctbf:bad intcoln] from DELETE with FK constraints and compound trigger |
13584130 | ORA-7445 compiling library unit with _LOAD_WITHOUT_COMPILE in non-base Edition |
13616375 | ORA-600 [qkaffsindex5] on a query with ORDER BY DESC and functional index on DESC column from SQL tuning index advisor job |
13786142+ | Cannot drop/replace trigger in editioning environment |
13810393 | Deadlock waiting for 'library cache: mutex x' while producing an ORA-4031 diagnostic dump |
13812031 | Wrong results from query on partitioned table |
13860201 | Dump on kkspbd0 |
13911821 | ORA-7445 [kksLockDelete] then Instance crash from PMON |
14110275 | ORA-600 / ORA-7445 from parse of query with table that has undergone ADD COLUMN optimization |
14226599 | Increase dc_rollback_segs hash buckets to reduce 'latch: row cache objects' waits |
14644185 | Part of fix 12531263 missing from 11.2.0.3 - disabled deadlock detection for Cursor build locks (on $BUILD$) |
16175381 | Process spin in kkscsSearchChildList() -> kkshGetNextChild() with fix for bug 14613900 present |
16344871 | Wrong results / Mismatch in cursor shareability with VPD/RLS policy with fix 13080778 present |
High Availability
12794305 | ORA-600 [krsr_pic_complete.8] on standby database |
13377816 | Excessive memory use by DIAG / DIA0 |
13385346 | GCR0 trace files continuously created with "kjgcr_DeleteSO" message |
13718279 | DB instance terminated due to ORA-29770 in RAC |
13737746 | Recovery fails with ORA-600 [krr_assemble_cv_12] or ORA-600[krr_assemble_cv_3] |
12959852 | RAC instance crash due to ORA-600[kjbrscping:slsend] in LMS |
13399435 | RAC instance eviction due to "TIMEOUT in DRM FREEZE step" or "SYNC TIMEOUT ..." |
13593999 | RAC Instance eviction during dynamic remastering or cluster reconfiguration. |
13645917+ | PMON block recovery loop - instance hang |
13685544 | Starting up instance may be evicted in RAC |
13732226 | RAC node eviction dur to "TIMEOUT in DRM FREEZE step" or "SYNC TIMEOUT" |
9706792 | ORA-600 [kcrpdv_noent] during STARTUP in crash recovery with parallelism |
11715084 | Active duplicate should work when connected to Standby as source DB |
12983611 | ORA-600 [krsw_redo_complete.1] can occur (rare) |
13632809 | RMAN BZ2 compression backup hangs |
13680405 | PGA consumption keeps growing in DIA0 process |
14088346 | LMS crashes with ORA-600 [kjbrwrdone:sc3] |
Oracle Security
11708510 | ORA-28267 from JDBC issuing SQL over DB link to 10g DB ( relates to E2E_CONTEXT namespace) |
Oracle Space management
12583611 | Excessive TX enqueue contention with heavy Securefile insert workload on RAC |
13464002 | ORA-600 [kcbchg1_12] or ORA-600 [kdifind:kcbget_24] |
13649031 | ORA-10637 occurs on SHRINK of a partitioned table with deferred segments |
13773133 | ORA-600 [ktsflmerge-cycle-1] during inserts into freelist managed segment |
9659614 | Large trace file for ORA-8103 |
13544396 | Corruption / ORA-600 after ALTER TABLE of a LONG to CLOB |
13910420 | ORA-8103 during insert / update of basicfile LOB in assm segment using space search cache |
13913630 | INSERT ... SELECT does not compress some rows |
13958038 | Abnormal segment growth with unformatted blocks when using space search cache |
14176879 | Extensive growth of Securefiles segments undergoing updates |
14207163 | ORA-17503 from create EHCC tablespace on ZFS |
14472647 | Wrong results on IOT secondary index after DML |
14589750 | TRUNCATE table hangs in RAC with "reliable message" wait if fix 14144283 present |
Oracle Spatial
14035825 | Fix for bug 14035825 |
13561951 | Fix for bug 13561951 |
Oracle Streams
12594032 | Call Memory corruption / ORA-600 [17114] with CDC |
13787482 | CDC purge routine invalidating custom indexes |
Oracle Transaction Management
13430938 | ORA-4031 with high "KTC latch subh" memory usage |
14138130 | SGA memory corruption / ORA-7445 when modifying uncompressed blocks of an HCC-compressed segment |
15853081 | DML hangs when HCC has initrans=255 |
Oracle Virtual Operating System Services
12585543 | Slow rman backup / IO Slaves not spawned |
13914613 | Excessive time holding shared pool latch in kghfrunp with auto memory management |
SQL*Net
14841558 | Fix for bug 14841558 |
PL/SQL
13612575 | ORA-600 [15419] / PLS-801 using REFCURSOR bind with PLSQL |
13624984 | IMPDP or IMP hangs on compilation of PLSQL containing a pipelined function |
13804294 | Internal errors, corruptions, using pipelined function whose rows raise exceptions |
Server Manageability
13257247 | AWR Snapshot collection hangs due to slow inserts into WRH$_TEMPSTATXS. |
13699124 | AWR Compare Period takes a long time to generate |
Workspace Manager
14220725 | Fix for bug 14220725 |
16368108 | ORA-955 from Workspace Manager script owmv1120.plb |
Miscellaneous Issues
13596521 | Fix for bug 13596521 |
14841812 | Fix for bug 14841812 |
建议关注以下bug:
bug 13397104
遇到:
ora-600 [kjblpkeydrmqscchk:pkey]
ora-600 [kjbldrmrpst:pkey]
ora-600 [kjbrchkpkeywait:timeout]
导致数据库crash
Workaround:
disable read mostly locking via: _gc_read_mostly_locking=false
相关bug:14409183
bug 13250244
遇到:
共享池KGLHD内存泄漏。
可以看到共享池KGLHD越来越大或者ORA-4031,而且有多个共享池子池。
Workaround:
Set "_kghdsidx_count"=1
相关bug:13550185(也是由于多共享池子池导致)
bug 12873183
遇到:
使用rownum对分区表进行查询时,有可能返回错误的结果。
bug 13454210
遇到:
看到hang,有"library cache lock" 和"library cache load lock",堆栈信息中未看到kksfbc。
bug 14052474
遇到:
在join操作中有NULLIF的查询有可能得到错误的结果。
bug 13911821
遇到:
由于PMON进程导致实例crash,可能遇到报错ORA-7445 [kksLockDelete]或者ORA-4024。
bug 14226599
遇到:
打这个对应的patch可以减轻在dc_rollback_segments上的row cache latch,latch: row cache objects等待时间,尤其数据库有大量的undo segment。
bug 13377816
遇到:
ASM dia0进程占用大量内存
select ss.sid, p.pid, p.pname, sn.name,round(ss.value/(1024 *1024))||'Mb' "MegaBytes"
from v$sesstat ss, v$statname sn,v$session s, v$process p
where s.paddr = p.addr
and sn.statistic# = ss.statistic#
and s.sid = ss.sid
and sn.name in ('session pga memory' , 'session pga memory max')
and p.pname='DIA0'
order by ss.value
/
60 8 DIA0 session pgamemory 58Mb
60 8 DIA0 session pga memorymax 58Mb
After one day:
60 8 DIA0 session pga memorymax 898Mb
60 8 DIA0 session pgamemory 898Mb ====>> growth is about 840MB perday in this example
Workaround:
临时解决办法可以先kill一下dia0进程。
bug 13718279
遇到:
RAC中一个节点由于遇到ORA-29770错误而中断,类似如下报错
LMS8 (ospid: 2917) has not called a waitfor 93 secs.
Errors in file /.../xxx_lmhb_2927.trc
ORA-29770: global enqueue process LMS8 (OSID2917) is hung for more than 70 seconds
Incident details in: ...
ERROR:Some process(s) is not making progress.
Trace内内容
LMS8 (ospid: 1998) has not moved for 73sec (1329175625.1329175552)
kjfmGCR_HBCheckAll: LMS8 (ospid: 1998) has status 2
: waiting for event 'gcs remote message' for 0secs with wait_id 23404.
Workaround:
Set init.ora parameter _gc_defer_time to 3.
bug 12959852
遇到:
LMS进程报ORA-600[kjbrscping:slsend]进而导致实例crash。
bug 13399435
遇到:
由于'TIMEOUTin DRM FREEZE step' 或者'SYNCTIMEOUT while waiting for lmd'导致实例被驱逐。
相关bug:13732226与之类似
bug 14088346
遇到:
由于ORA-600[kjbrwrdone:sc3],LMS进程crash实例。
修改统计信息故障处理说明
很多故障都是由于某条或者某些执行计划错误变更而导致的性能问题,我们可以通过修改统计信息的方式来对执行计划进行调整。
统计信息迁移
当语句执行计划出现问题后,可以考虑尝试将原10g版本的统计信息导入到11g版本数据库中,尝试解决问题。
统计信息迁移步骤(以迁移test用户下a1表的统计信息为例,中间信息存储表为stat_history):
进行sql语句执行计划固化,进行固化之前,首先通过hint或者参数方式,找到目标sql语句最优的执行计划,假设目标sql语句的sql_id为6bcwxgty705p8,通过hint得到这个语句的目标执行计划hash值644658511,然后执行:
SQL> @coe_xfr_sql_profile.sql 6bcwxgty705p8 644658511
执行完成后,在执行的目录下生成文件:coe_xfr_sql_profile_6bcwxgty705p8_644658511.sql
然后运行这个脚本,即完成了sqlprofile创建。
最后通过DBA_SQL_PROFILES查询相关信息。
回退方案
Downgrade说明
Oracle支持对升级进行downgrade的,通过Downgrade可以将包括数据库及软件版本都回退到升级前的版本,数据库内的数据库不用额外进行恢复。
根据沟通,如果数据库未使用Oracle Database Vault,本文中不考虑Oracle Database Vault的影响。
约束条件
并不是所有的情况下都可以进行Downgrade,10g Release 2版本要求是10.2.0.2及以后版本进行升级,才可以进行Downgrade。
如果希望可以进行Downgrade,要求进行upgrade的时候不能修改数据库的COMPATIBLE参数,如果将这个参数修改为11.2.0.0以上版本,那么将不能进行Downgrade。
DB downgrade步骤
以下所写步骤请参考,请在实际环境中进行测试形成最终完整可操作文档。
1. DST修改,在进行upgrade的时候,使用DBMS_DST PL/SQL包更新了database time zone版本,那么需要恢复对应的版本,恢复方法为到MOS下载之前数据库版本在对应平台上的patch。
查询当前DST版本命令:
SELECT value$ FROM sys.props$ WHERE NAME = 'DST_PRIMARY_TT_VERSION';
2. 如果设置了ORA_TZFILE环境变量请去掉这个环境变量
3. 如果安装了Oracle Application Express,备份一个apxrelod.sql文件到到非Oracle目录下。
4. 如果有基于fixed objects创建的对象,后面删除这些对象时有可能遇到ORA-600错误,downgrade完成后可以重建这些对象。
5. 以Oracle用户登录系统
6. 停止所有节点的Enterprise Manager
7. 停止数据库,修改参数CLUSTER_DATABASE为false
8. 以sysdba使用sqlplus连接数据库
9. 以downgrade模式启动数据库
SQL> STARTUP DOWNGRADE
10. 如果配置了Enterprise Manager,先删除sysman用户
DROPUSER sysman CASCADE;
11. 制定日志路径
SQL> SPOOL downgrade.log
12. 执行downgrade脚本
SQL> @catdwgrd.sql
该脚本需要在11g版本的环境下执行11g版本的脚本。如果有组件downgrade失败会显示ORA-39709报错,必须让所有组件downgrade都成功数据库downgrade才成功。
13. 停止日志记录
SQL> SPOOL OFF
14. 停止数据库并退出sqlplus
SQL>SHUTDOWN IMMEDIATE
SQL> EXIT
15. 修改ORACLE_HOME等环境变量到10g版本
16. 以sysdba使用sqlplus连接数据库
17. 以upgradee模式启动数据库
SQL> STARTUPUPGRADE
18. 制定日志路径
SQL> SPOOL reload.log
19. 执行catrelod.sql脚本
SQL> @catrelod.sql
Catrelod脚本将会重新在10g版本数据库中加载各个组件的适当版本。
20. 停止日志记录
SQL> SPOOLOFF
21. 停止数据库,修改参数CLUSTER_DATABASE为true并正常启动数据库。
22. 运行utlrp.sql脚本
SQL>@utlrp.sql
23. 修改集群内注册信息
$ srvctldowngrade database -d db-unique-name -o old_ORACLE_HOME -t to_relnum
clusterware downgrade步骤
GI downgrade支持从10.2.0.3到11.1.0.7升级到11.2.0.3版本后的downgrade。
1. 在非OCR node执行(OCR node指进行执行安装或者升级的节点,一般来说是1节点)
#$NEW_HOME/crs/install/rootcrs.pl -downgrade -force
2. 在OCR node执行:
#$NEW_HOME/crs/install/rootcrs.pl -downgrade -force -lastnode -oldcrshome$OLD_HOME -version $OLD_VERSION
3. 清理各个节点gpnp profile
rm -rf$NEW_HOME/gpnp/*
mkdir -p$NEW_HOME/gpnp/profiles/peer $NEW_HOME/gpnp/wallets/peer$NEW_HOME/gpnp/wallets/prdr $NEW_HOME/gpnp/wallets/pa$NEW_HOME/gpnp/wallets/root
4. 删除各个节点checkpoint file
rm -rf $ORACLE_BASE/Clusterware/ckptGridHA_${nodename}.xml
5. 检查各个节点oratab文件中asm是否指向旧版本位置
6. 启动旧版本集群软件
$OLD_HOME/bin/crsctlstart crs
7. 检查旧版本集群运行是否正常:
exportORACLE_HOME=$OLD_HOME
$OLD_HOME/bin/crsctlquery crs activeversion
$OLD_HOME/bin/crsctlquery crs softwareversion
$OLD_HOME/bin/crsctlcheck crs
$OLD_HOME/bin/crs_stat-t
$OLD_HOME/bin/crs_stat
$OLD_HOME/bin/oifcfgiflist -p -n
$OLD_HOME/bin/oifcfggetif
$OLD_HOME/bin/ocrcheck
cat/etc/oracle/ocr.loc /var/opt/oracle/ocr.loc
$OLD_HOME/bin/crsctlget css diagwait
$OLD_HOME/bin/srvctlconfig nodeapps -n `hostname | cut -d'.' -f1 | awk '{ print tolower($0); }'` -a
$OLD_HOME/OPatch/opatchlsinventory oh=$OLD_HOME
ifconfig ## location and exact syntax innote 1054902.1
unsetORACLE_HOME
8. 设置"CRS=true" for OLD_HOME
/ocw/grid/oui/bin/runInstaller-updateNodeList ORACLE_HOME="/ocw/grid" CRS=true
## ==>/ocw/grid is current clusterware home
方案评价
Downgrade方案虽然可以进行版本回退,但是在实际当中使用极少,某些企业对此进行了测试,但是当前Oracle ACS未发现国内大型企业客户有采用此种方式进行正式生产系统回退的先例。
这种方式的优点:
l 不占用升级时间,此操作只在确定需要回退是才开始执行
缺点
l 技术本身限制较多 ,包括COMPATIBLE参数不能升级,很多新功能无法使用
l 影响面大 ,不仅涉及到数据库,rdbms,甚至包括集群软件都需要downgrade,因为涉及到集群操作,有可能完成downgrade后无法恢复到原来运行的状态
l Downgrade时间长 ,具体时间需要进行详细测试之后才能确定,但是肯定以小时作为时间计量单位,另外完成downgrade后需要花费额外的时间来验证downgrade是成功的
l 操作复杂需要单独测试, 整个操作步骤很多,中间步骤出现问题进行处理难度将更大,所以此种方案必须进行多次多场景测试才可应用于生产环境。
l 风险度高 ,因为在决定downgrade的时候,仅有11g数据库内有最完整数据,此时如果downgrade出现数据问题,将会导致数据丢失
GoldenGate说明
由于本次升级,对于原有10g数据库不进行变更,那么如果在升级过程中或者校验时发现问题可以回退到原有10g版本数据库系统,对业务影响较小,但是如果校验成功,11g数据库连接应用对外服务后发现问题,由于有新的数据更新,已经无法回退连接到原有10g版本数据库系统,如果在11g版本数据库连接应用之前,可以实施Oracle GoldenGate,将连接应用后的数据变更同步到原有10g版本数据库,那么当运行一段时间后发现11g版本数据库存在问题,也可以切换回原有的10g版本数据库而没有数据丢失。
约束条件
要求11g版本的数据库打开归档,并且打开补充日志,建议开启force logging以防止隐患。
对于RAC环境11g数据库,GoldenGate的相关软件和工作目录需要配置在shared disk环境中,从而保证对所有node都是可用的,从任何一个node都可以启动GoldenGate的进程,当其中一个node出现异常时,可以在剩余的node启动而无须修改任何配置参数。
GoldenGate实施步骤
以下所写步骤请参考,正式实施前请进行测试形成正式文档。
1. 安装Oracle GoldenGate(以下简称OGG)(新系统指11g版本数据库,旧系统指10g版本数据库,以下对新旧系统都执行)
a) 建议使用Oracle用户安装和配置OGG;
b) 可以在任意位置建立OGG软件安装目录,例如/app/goldengate,该目录的属主为Oracle用户。但为了实现高可用性,建议放在共享阵列,并且所在磁盘必须有一定的空间,例如几十个G。
c) 使用管理员用户通过ftp等方式上传OGG软件并解压缩.
2. 数据库必须打开归档模式(对新系统执行)
Grantsucceeded.
SYS@ora11g>archive log list;
Database logmode Archive Mode
Automaticarchival Enabled
。。。。。。
3. 检查日志记录要求(对新系统执行)
SQL>selectsupplemental_log_data_min from v$database;
结果为NO,表示没有打开附加日志。使用以下命令将数据库附加日志打开:
SQL>alterdatabase add supplemental log data;
切换日志以使附加日志生效:
SQL>ALTERSYSTEM ARCHIVE LOG CURRENT;
4. 建立OGG数据库用户(新旧系统执行)
OGG需要从数据字典读取表结构.OGG数据库用户权限:
CREATE USER goldengate IDENTIFIED BY goldengate DEFAULT TABLESPACE USERS ;
GRANT CONNECT TO goldengate;
GRANT CREATE SESSION TO goldengate;
GRANT ALTER SESSION TO goldengate;
GRANT RESOURCE TO goldengate;
GRANT SELECT ANY DICTIONARY TO goldengate;
GRANT SELECT ANY TABLE TO goldengate;
GRANT FLASHBACK ANY TABLE TO goldengate;
GRANT ALTER ANY TABLE TOgoldengate;
目标端根据需要再额外添加其他权限,例如需要对表做DML:
GRANT INSERT ANY TABLE TO goldengate;
GRANT UPDATE ANY TABLE TO goldengate;
GRANT DELETE ANY TABLE TO goldengate;
5. 在源端OGG命令行模式下为数据库表添加trandata(新系统执行)
a) GGSCI>DBLOGIN USERID xxxxx, PASSWORD xxx
b) GGSCI>ADD TRANDATA<owner>.<table>
6. 创建子目录,上传参数文件
a) 在安装目录下运行OGG命令行控制界面:
./Ggsci
b) 在OGG命令行界面下创建子目录:
GGSCI> create subdirs
c) 通过ftp上传参数文件mgr, ext*,dpe*到dirprm文件夹中,后面手工通过edit param <进程名>编辑也可。
7. 配置GOLDENGATE 相关进程
a) 配置mgr进程
GGSCI>edit param mgr
port 7809
--AUTORESTARTER *, RETRIES 3, WAITMINUTES 2, RESETMINUTES 60
--PURGEOLDEXTRACTS./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7
GGSCI>start mgr
Manager started.
b) 配置源端抽取进程
(注:从此步骤起,请定义自己的extract/data pump/replicat名称,以及exttrail和rmttrail名称。建议抽取日志的进程以extXX命名,在网络上传输数据的data pump进程以dpeXX格式命名,replicat以repXX格式命名;本地队列以./dirdat/tX命名,远程队列以./dirdat/rX命名。)
GGSCI>add ext extXX, tranlog, begin now
EXTRACT added.
GGSCI>add exttrail ./dirdat/tX, extextXX, megabytes 50
EXTTRAIL added.
GGSCI>edit param extXX
EXTRACT extXX
--setenv (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK )
USERID ogg,PASSWORD ogg
EXTTRAIL./dirdat/tX
dynamicresolution
tablesystem.custcardinfo1;
GGSCI>add ext dpeXX, exttrailsource./dirdat/tX
EXTRACT added.
GGSCI>add rmttrail ./dirdat/rX, extdpeXX, megabytes 50
RMTTRAIL added.
GGSCI>edit param dpeXX
extract dpeXX
--setenv (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK )
passthru
rmthost 旧系统IP,mgrport7809, compress
rmttrail./dirdat/rX
Dynamicresolution
table <owner>.*;
8. 启动源端进程
a) 启动源端抓取进程:
GGSCI>start er *
b) 查看源端进程状态:
GGSCI>info er *
RUNNING
RUNNING
注:若目标端mgr进程未启动,则该步骤无法启动dpe*进程,需等目标端mgr进程启动后再启动。
9. 配置Oracle数据库的目标进程
a) 配置目标端投递进程:
GGSCI>add rep repxx, exttrail ./dirdat/rX,nodbcheckpoint
b) 配置目标参数:
replicatrepXX
USERIDgoldengate, PASSWORD goldengate
--SETENV(NLS_LANG = "AMERICAN_AMERICA.ZHS16GBK")
SETENV(NLS_LANG = "SIMPLIFIED CHINESE_CHINA.ZHS16GBK")
reperrordefault, discard
discardfile./dirrpt/rp02.dsc, append, megabytes 50
grouptransops100
DDL includemapped
DDLERRORDEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5
DDLOPTIONSreport
MAP<owner>.*, TARGET <owner>.*;
c) 启动目标端投递进程:
GGSCI>start repXX
观察数据是否正确复制到目标端。
方案评价
使用Oracle GoldenGate作为回退方案,保证了再运行过程中存在一份在线数据备份,有效的保护了数据,所有的实施都在应用上线前进行实施,当出现问题时只需要恢复应用对数据库的指向即可。
这种方式的优点:
l 回退速度快操作简单,只需要进行应用数据库指向即可
l 存在在线数据备份,提升了数据安全
l 风险低,即使在OGG同步过程中出现问题,对运行的生产系统是没有直接影响的
缺点
l 需要额外购买软件 ,Oracle GoldenGate是单独产品,需要额外购买
l 安全风险 ,需要在新旧数据库分别创建数据库用户,加大安全风险
l 加长升级时间 ,由于要在应用连接数据库前启动OGG,所以OGG部署应该在UPGRADE之后,应用启动之前,这样就加大了应用停止时间
l 数据库直接性能影响, 由于推荐打开数据库的force logging,并且开启补充日志,所以将会增加数据库redo开销,影响数据库性能。
l 数据库间接性能影响 ,因为主机资源是固定的,虽然OGG可以限制内存的使用量,当存在大事务或者redo量很大时,有可能OGG会消耗较大量系统资源,从而对同样在主机上运行的数据库系统产生影响。[升级] 数据库升级到11g的应急方案