(1) 初始化参数设置的建议
(1.1) sec_case_sensitive_loacgon
在12.1.0.1中不建议修改。默认值是true,但是如果设置成false,启动的时候会有提示:ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance。但是设置成false仍然生效,即忽略大小写的密码可以登录。
(1.2) SQLNET.ALLOWED_LOGON_VERSION_SERVER
在12c中默认值是11,所以如10.2.0.5的JDBC连接过来,就会报错ora-28040,虽然可以设置SQLNET.ALLOWED_LOGON_VERSION_SERVER=8来解决这个问题,但是由于今后11.1以下版本的JDBC不再被oracle支持,因此还是建议升级JDBC驱动来实现。
jar file和JDBC驱动之间的关系,参考Doc ID 401934.1。 10.2版本的JDBC,使用ojdbc14.jar;11.2版本的JDBC,使用ojdbc6.jar;12.1.0的JDBC使用ojdbc7.jar。
SQLNET.ALLOWED_LOGON_VERSION_SERVER 的值有{ 8 | 10 | 11 | 12 | 12a },各个值如下含义:
12a for Oracle Database 12c authentication protocols (strongest protection)
12 for the critical patch updates CPUOct2012 and later Oracle Database 11g ,authentication protocols (recommended)
11 for Oracle Database 11g authentication protocols (default)
10 for Oracle Database 10g authentication protocols
8 for Oracle9i authentication protocol
默认值是11,推荐值是12(如果你没有小于10.2.0.5的客户端)
(1.3) AUDIT_TRAIL
取值范围是: { none | os | db [, extended] | xml [, extended] },默认值是db或者none。
和12c的新特性Unified Auditing有关。是否启用unified auditing,可以用select VALUE from V$OPTION where PARAMETER=’Unified Auditing’;检查。
Unified Auditing默认是工作在mixed模式。
建议:
如果你以前没有审计,那么你可以设置成none。
如果以前有审计,建议设置成db。
更多信息,参考 http://tinyurl.com/UnifiedAuditing
(1.4)DEFERRED_SEGMENT_CREATION
从11.2开始,这个值的默认值是true,建议12c中设置成false。
(1.5)JOB_QUEUE_PROCESSES
从11.1开始,这个值是1000,建议设置成和CPU core相等的值。
(1.6)_DATAFILE_WRITE_ERRORS_CRASH_INSTANCE
这个值默认值是true。所有datafile的IO写error,都会导致数据库crash。
在11.2.0.2之前这个值是false,即只是offline datafile(非system),而不crash instance。11.2.0.2之后,是true。
建议:注意这个从11.2.0.2之后的变化。
(1.7) MAX_STRING_SIZE
这是在12c中的新参数。默认值是standard。
这个参数用于控制varchar2,nvarchar2,raw类型的最大值。standard下,行为和12c之前一样,即varchar2和nvarchar2是4000 bytes,raw是2000 bytes,
改成extended之后,启用了32k strings新特性,varchar2、nvarchar2、raw最大长度可以达到32767 bytes。
修改方式:
1. startup upgrade
2. ALTER SYSTEM SET MAX_STRING_SIZE = EXTENDED;
3.运行@?/rdbms/admin/utl32k.sql
但是注意,单向修改,改了之后,就改不回来了。(可以flashback)
注意原生32k strings是以out-of-line的blob方式存储,且还是basic file,而如果是以modify成32k strings的是以in-line的方式行链接存储。
所以转32k strings需要考虑lob效率的问题。
(2)其他在12c中的参数:
(2.1) _OPTIMIZER_AGGR_GROUPBY_ELIM
Values: { TRUE | FALSE } 默认值是true
Recommendation: FALSE – Wrong Results with GROUP BY Clause in Nested Query (Doc ID 19567916.8)
建议值:false
(2.2) INMEMORY_FORCE
Values: { DEFAULT | OFF } 默认值是default
Explanation: In-Memory Optimization
Recommendation: OFF – Unless you have an Oracle In-Memory license
建议值为off,除非你有in-memory的license
(2.3) OPTIMIZER_DYNAMIC_SAMPLING
如果统计信息不存在,进行动态采样的比例。
Values: { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 } 默认值是2
解释:
a.0: Off
b.2: Check 不多于64个blocks – generate stats during parse
c.11:12c的新增加值,进行动态采样的block数由系统自动决定,采样结果会保留在statistics repository,供下次使用。
建议值:参考在线文档SQL Tuning Guide,最佳实践是在session级设置。
(2.4) AWR Lite Snapshots
参考Doc ID 1993045.1,建议在手工snapshot的时候,用lite模式
–默认值是bestfit
_AWR_SNAPSHOT_LEVEL = BASIC | LITE | TYPICAL | ALL | BESTFIT
–手工snapshot的时候,建议lite
SQL> exec dbms_workload_repository.create_snapshot(‘LITE’);
(2.5) _OPTIMIZER_COST_BASED_TRANSFORMATION
默认值是on,从10.2开始,默认值就是on了,但是在11.2.0.3之前,建议设置off
(2.6) SESSION_CACHED_CURSORS
默认值是50,建议设置成200,然后按照208857.1进行调整。
太大容易有shared pool碎片
(2.7) _MEMORY_IMM_MODE_WITHOUT_AUTOSGA
默认值是true,如果需要禁用偷buffer cache的属性,设置成false
(2.8) OPTIMIZER_USE_PENDING_STATISTICS
默认值是false,可以在session级设置成true后,测试新的但是还没发布的统计信息,对sql的影响。
(2.9)OPTIMIZER_USE_INVISIBLE_INDEXES
是否让优化器看见invisible的索引,默认值是false
ALTER INDEX idx_ename ON emp(ename) INVISIBLE;
ALTER SESSION SET OPTIMIZER_USE_INVISIBLE_INDEXES=TRUE;
(2.10) 其他建议值:
a. _optimizer_adaptive_plans=FALSE (需要评估,Adaptive Query Optimization Doc ID 2031605.1)
b. _optimizer_unnest_scalar_sq=FALSE (Bug 19894622 – ORA-600 [kkqcsfixfro:1 — frooutj] error occur in 12c (Doc ID 19894622.8))
c. _rowsets_enabled=FALSE (Bug 22173980 : WRONG RESULTS WHEN “_ROWSETS_ENABLED” = TRUE)
d. _optimizer_reduce_groupby_key=FALSE (Bug 20634449 – Wrong results from OUTER JOIN with a bind variable and a GROUP BY clause in 12.1.0.2)
e. _kks_obsolete_dump_threshold=0 or 8(Huge Trace Files Created Containing “—– Cursor Obsoletion Dump sql_id=%s —–” (Doc ID 1955319.1) ,该参数取值范围是0~8,默认值是1。设置0表示永远不dump,设置8表示parent cursor obsoleted 8次之后才dump。)
(2)其他在12c中的参数:
(2.1) _OPTIMIZER_AGGR_GROUPBY_ELIM
Values: { TRUE | FALSE } 默认值是true
Recommendation: FALSE – Wrong Results with GROUP BY Clause in Nested Query (Doc ID 19567916.8)
建议值:false
(2.2) INMEMORY_FORCE
Values: { DEFAULT | OFF } 默认值是default
Explanation: In-Memory Optimization
Recommendation: OFF – Unless you have an Oracle In-Memory license
建议值为off,除非你有in-memory的license
(2.3) OPTIMIZER_DYNAMIC_SAMPLING
如果统计信息不存在,进行动态采样的比例。
Values: { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 } 默认值是2
解释:
a.0: Off
b.2: Check 不多于64个blocks – generate stats during parse
c.11:12c的新增加值,进行动态采样的block数由系统自动决定,采样结果会保留在statistics repository,供下次使用。
建议值:参考在线文档SQL Tuning Guide,最佳实践是在session级设置。
(2.4) AWR Lite Snapshots
参考Doc ID 1993045.1,建议在手工snapshot的时候,用lite模式
–默认值是bestfit
_AWR_SNAPSHOT_LEVEL = BASIC | LITE | TYPICAL | ALL | BESTFIT
–手工snapshot的时候,建议lite
SQL> exec dbms_workload_repository.create_snapshot(‘LITE’);
(2.5) _OPTIMIZER_COST_BASED_TRANSFORMATION
默认值是on,从10.2开始,默认值就是on了,但是在11.2.0.3之前,建议设置off
(2.6) SESSION_CACHED_CURSORS
默认值是50,建议设置成200,然后按照208857.1进行调整。
太大容易有shared pool碎片
(2.7) _MEMORY_IMM_MODE_WITHOUT_AUTOSGA
默认值是true,如果需要禁用偷buffer cache的属性,设置成false
(2.8) OPTIMIZER_USE_PENDING_STATISTICS
默认值是false,可以在session级设置成true后,测试新的但是还没发布的统计信息,对sql的影响。
(2.9)OPTIMIZER_USE_INVISIBLE_INDEXES
是否让优化器看见invisible的索引,默认值是false
ALTER INDEX idx_ename ON emp(ename) INVISIBLE;
ALTER SESSION SET OPTIMIZER_USE_INVISIBLE_INDEXES=TRUE;
(2.10) 其他建议值:
a. _optimizer_adaptive_plans=FALSE (需要评估,Adaptive Query Optimization Doc ID 2031605.1)
b. _optimizer_unnest_scalar_sq=FALSE (Bug 19894622 – ORA-600 [kkqcsfixfro:1 — frooutj] error occur in 12c (Doc ID 19894622.8))
c. _rowsets_enabled=FALSE (Bug 22173980 : WRONG RESULTS WHEN “_ROWSETS_ENABLED” = TRUE)
d. _optimizer_reduce_groupby_key=FALSE (Bug 20634449 – Wrong results from OUTER JOIN with a bind variable and a GROUP BY clause in 12.1.0.2)
e. _kks_obsolete_dump_threshold=0 or 8(Huge Trace Files Created Containing “—– Cursor Obsoletion Dump sql_id=%s —–” (Doc ID 1955319.1) ,该参数取值范围是0~8,默认值是1。设置0表示永远不dump,设置8表示parent cursor obsoleted 8次之后才dump。)
(4) 查找补丁信息:
原来是通过dba_registry_history 查询,现在可以通过下面的方法查询:
SQL> exec dbms_qopatch.get_sqlpatch_status;
下面的语句是用来查询inventory的位置:
SQL> select xmltransform(DBMS_QOPATCH.GET_OPATCH_LSINVENTORY,DBMS_QOPATCH.GET_OPATCH_XSLT) from dual;
查询某个patch是否被安装:
SQL> select xmltransform(DBMS_QOPATCH.IS_PATCH_INSTALLED(‘19303936 ‘),DBMS_QOPATCH.GET_OPATCH_XSLT) from dual;
查询所有的patch的情况:
SQL> select xmltransform(DBMS_QOPATCH.GET_OPATCH_LIST,DBMS_QOPATCH.GET_OPATCH_XSLT) from dual;
(5)升级catalog变化:
RMAN Catalog Upgrade:
– SQL> @$ORACLE_HOME/rdbms/admin/dbmsrmansys.sql <<<<需要先运行这一步(以前没有),再运行upgrade catalog
– $ rman CATALOG my_catalog_owner@catdb
recovery catalog database Password:
RMAN> UPGRADE CATALOG;
RMAN> UPGRADE CATALOG;
RMAN> EXIT;
(6)增量统计信息收集增强(增量统计信息收集和交换分区相结合)
–先设置使用过期比例USE_STALE_PERCENT。定义“变化”的分区不会收集新的统计信息,除非有xx%百分比的变化。
SQL> exec DBMS_STATS.SET_DATABASE_PREFS(‘INCREMENTAL_STALENESS’,’USE_STALE_PERCENT’);
–设置过期比例为12%(默认是10%)
SQL> exec DBMS_STATS.SET_DATABASE_PREFS(‘STALE_PERCENT’,’12’);
(7)统计信息情况查看:
–查看整个库的统计信息情况:
SQL> variable mystatrep2 clob;
SQL> set long 1000000
SQL> begin
2 :mystatrep2 := DBMS_STATS.REPORT_STATS_OPERATIONS(since=>SYSTIMESTAMP-
3 1,until=>SYSTIMESTAMP, detail_level=>’TYPICAL’,format=>’TEXT’);
4 end;
5 /
PL/SQL procedure successfully completed.
SQL>
SQL> set serverout on
SQL> set long 999999999
SQL> set line 10000
SQL> set pages 10000
SQL> col mystatrep2 for a200
SQL> print mystatrep2
MYSTATREP2
——————————————————————————————————————————————————————————————————–
——————————————————————————————————————————————————————————————————-
| Operation Id | Operation | Target | Start Time | End Time | Status | Total Tasks | Successful Tasks | Failed Tasks | Active Tasks |
——————————————————————————————————————————————————————————————————-
| 366 | export_stats_for_dp | TEST | 13-JUL-16 02.12.59.130000 PM +08:00 | 13-JUL-16 02.12.59.203000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 365 | export_stats_for_dp | TEST | 13-JUL-16 02.08.18.857000 PM +08:00 | 13-JUL-16 02.08.18.880000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 364 | export_stats_for_dp | TEST | 13-JUL-16 02.04.13.425000 PM +08:00 | 13-JUL-16 02.04.13.480000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 363 | export_stats_for_dp | TEST | 13-JUL-16 01.57.50.812000 PM +08:00 | 13-JUL-16 01.57.50.846000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 362 | export_stats_for_dp | TEST | 13-JUL-16 01.56.34.637000 PM +08:00 | 13-JUL-16 01.56.34.667000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 361 | import_stats_for_dp | TEST | 13-JUL-16 01.55.50.018000 PM +08:00 | 13-JUL-16 01.55.50.294000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 360 | export_stats_for_dp | TEST | 13-JUL-16 01.53.54.840000 PM +08:00 | 13-JUL-16 01.53.54.879000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 359 | import_stats_for_dp | TEST | 13-JUL-16 01.52.17.822000 PM +08:00 | 13-JUL-16 01.52.18.059000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 358 | import_stats_for_dp | TEST | 13-JUL-16 01.46.44.289000 PM +08:00 | 13-JUL-16 01.46.44.611000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 357 | export_stats_for_dp | TEST | 13-JUL-16 01.43.12.810000 PM +08:00 | 13-JUL-16 01.43.13.543000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 356 | import_stats_for_dp | TEST | 13-JUL-16 01.40.03.349000 PM +08:00 | 13-JUL-16 01.40.03.650000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 355 | import_stats_for_dp | TEST | 13-JUL-16 01.37.36.601000 PM +08:00 | 13-JUL-16 01.37.36.843000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 354 | import_stats_for_dp | TEST | 13-JUL-16 01.36.32.072000 PM +08:00 | 13-JUL-16 01.36.32.321000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 353 | import_stats_for_dp | TEST | 13-JUL-16 01.34.56.514000 PM +08:00 | 13-JUL-16 01.34.56.790000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 352 | import_stats_for_dp | TEST | 13-JUL-16 12.01.25.756000 PM +08:00 | 13-JUL-16 12.01.26.022000 PM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 351 | import_stats_for_dp | TEST | 13-JUL-16 11.45.08.131000 AM +08:00 | 13-JUL-16 11.45.08.703000 AM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
| 350 | export_stats_for_dp | TEST | 13-JUL-16 11.42.21.767000 AM +08:00 | 13-JUL-16 11.42.24.557000 AM +08:00 | COMPLETED | 0 | 0 | 0 | 0 |
——————————————————————————————————————————————————————————————————-
SQL>
–查看某个schema的统计信息收集情况:
SQL> set serverout on
SQL> set long 999999999
SQL> set line 10000
SQL> set pages 10000
SQL> col my_report for a200
SQL> variable my_report clob;
SQL> BEGIN
2 :my_report := DBMS_STATS.REPORT_GATHER_SCHEMA_STATS(ownname => ‘TEST’,
3 detail_level => ‘TYPICAL’, format => ‘TEXT’);
4 END;
5 /
PL/SQL procedure successfully completed.
SQL>
SQL> print my_report
MY_REPORT
——————————————————————————————————————————————————————————————————–
——————————————————————————————————————————————————————————————————-
| Operation Id | Operation | Target | Start Time | End Time | Status | Total Tasks | Successful Tasks | Failed Tasks | Active Tasks |
——————————————————————————————————————————————————————————————————-
| 368 | gather_schema_stats (reporting mode) | TEST | | | | 1 | | | |
——————————————————————————————————————————————————————————————————-
——————————————————————————————————————————————————————————————————-
| |
| ————————————————————————————————————————————————————————————————— |
| T A S K S |
| ————————————————————————————————————————————————————————————————— |
| ——————————————————————————————————————————————————————————————— |
| | Target | Type | Start Time | End Time | Status | |
| ——————————————————————————————————————————————————————————————— |
| | TEST.T1 | TABLE | | | | |
| ——————————————————————————————————————————————————————————————— |
| |
| |
——————————————————————————————————————————————————————————————————-
(8)DBMS_ROLLING
Data Guard Simple Rolling Upgrade
Semi-automation of Transient Logical Standby Rolling Upgrade
Works with Data Guard Broker
Procedure DBMS_ROLLING
(9) Real-Time ADDM:
– MMON进程负责收集数据, 每隔3秒一次,不会有lock/latch
– MMON的子进程创建report,并保留在AWR中,可以通过查询 DBA_HIST_REPORTS
参考 Mike Dietrich Upgrade, Migrate & Consolidate to Oracle Database 12c/ oracleblog