Oracle顾问程序体系

SQL语句执行步骤

    1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义。

    2)语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。

    3)视图转换,将涉及视图的查询语句转换为相应的对基表查询语句。

    4)表达式转换,将复杂的 SQL 表达式转换为较简单的等效连接表达式。

    5)选择优化器,不同的优化器一般产生不同的执行计划

    6)选择连接方式,ORACLE有三种连接方式,对多表连接ORACLE可选择适当的连接方式。

    7)选择连接顺序,对多表连接ORACLE选择哪一对表先连接,选择这两表中哪个表做为源数据表。

    8)选择数选择合适的数据搜索路径,如是选用全表搜索还是利用索引或是其他的方式。

    9)运行“执行计划”

spacer.gif

维护窗口自动执行SQL Tuning Advisor收集SQL语句辅助统计信息和局部执行统计信息,放在SQL Profile中,帮助查询优化器因为缺乏足够的信息,生成糟糕的执行计划。

1、查询优化器

2、统计信息

查询优化器使用统计信息(存放在数据字典)来设计执行计划,oracle多达859种统计信息,其中对象统计信息最重要

对象统计信息(静态,oracle维护窗口自动执行Optimizer Statistics Gathering收集对象统计信息)

表统计信息,显示在DBA_TABLES

行数、分配块数、正在使用的块的空闲空间数、行平均长度、链接行数

表的列统计信息,显示在DBA_TAB_COLUMNS

不同值数目、最大值最小值、NULL值数目、平均列长度、

索引统计信息(行删除时,索引键保留),显示在DBA_INDEXES

B-tree深度、不同键值数目、聚合因子

与索引相关的统计信息,显示在INDEX_STATS(对索引的分析填充此视图)

引用现有行的索引数、引用被删除行的索引数

analyze table st compute statistics

dbms_stats

begin

dbms_stats.gather_table_stats( 
ownname=> 'HR', 
tabname=> 'EMPLOYEES' , 
estimate_percent=> DBMS_STATS.AUTO_SAMPLE_SIZE, 
cascade=> DBMS_STATS.AUTO_CASCADE, -- 是否收集索引
degree=> null, -- 搜索统计信息变行度
no_invalidate=> DBMS_STATS.AUTO_INVALIDATE, 

granularity=> 'AUTO', 
method_opt=> 'FOR ALL COLUMNS SIZE AUTO');
dbms_stats.lock_table_stats(ownname=> 'HR', tabname=> 'EMPLOYEES' );

end;

optimizer_use_pending_statistics

收集操作结束自动发布统计信息(默认)

保存新的统计信息,待定(暂不发布pending

alter session set optimizer_use_pending_statistics = TRUE;
session级别内使用待定的统计信息编译sql语句并且生成查询计划

参数 STATISTICS_LEVEL = BASIC|TYPICAL|ALL 

TYPICAL自我管理和调整功能需要的统计信息,维护窗口运行自动对象统计分析任务

BASIC禁用日常分析,无法使用各种性能和调整顾问,警报系统不起作用

ALL所有可能的统计信息,对性能产生负面影响

控制两个级别的统计信息的收集

实例相关活动中收集的统计信息MMON后台进程转储到AWR

数据库对象中的对象统计信息DBMS_STATS

3sql profile

4sql plan baseline

AWR

AWR Automatic Workload Repository10g新推功能

自动负载信息库,由MMON完成,帮助DBA发现数据库性能瓶颈

统计信息存在SYSAUX表空间的SYS模式下,默认保留7天

指标 Metrics

基准 Baseline一段时间内的性能数据,baseline永久保留,

用于与其他工作负载(awr snapshot或其他baseline)比较

Fixed baseline手工指定的一个固定连续时间段snapshot集合

Moving Windows Baselineawr保留周期内所有awr数据,默认窗口=awr保留期

Baseline Template分为single baseline template、repeating baseline template

single baseline template将来某个固定连续时间段建baseline

repeating baseling template自动持续地捕获某个连续时间段

DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT

(flush_level IN VARCHAR2 DEFAULT 'TYPICAL');

select SNAP_ID,BEGIN_INTERVAL_TIME,FLUSH_ELAPSED,SNAP_LEVEL 

from dba_hist_snapshot order by snap_id;

DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS

( retention => 43200, 
       interval => 30, topnsql => 100, 

dbid => 220853307);

DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE

(low_snap_id => 1, 
       high_snap_id => 20, dbid => 220853307);

DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE 

(start_snap_id => 21, 
       end_snap_id => 25, baseline_name => 'peak baseline', 
        dbid => 220853307, expiration => 30);

DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE

(baseline_name => 'peak baseline',
bascade => FALSE, dbid => 3310949047);

DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_METRICS

( baseline_name => 'peak maomi', 
         dbid => 220853307,
         instance_num => '1');

DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE 
        (window_size => 30, 
         dbid => 220853307);

DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE

( start_time => '2013-03-10 17:00:00', 
end_time => '2013-03-10 20:00:00', 
baseline_name => 'baseline_130310', 
template_name => 'template_130310', expiration => 30, 
       dbid => 220853307);

DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE
       (day_of_week => 'monday', hour_in_day => 17,

 duration => 3, expiration => 30,
       start_time => '2013-03-10 17:00:00', 
       end_time => '2013-12-31 20:00:00', 
       baseline_name_prefix => 'baseline_2013_mondays_', 
      template_name => 'template_2013_mondays',
       dbid => 220853307);

ADDM

Automatic Database Diagnostic Monitor 自动数据库诊断监,Oracle内部的一个顾问系统,通过AWR信息能自动完成数据库的一些优化建议

SQL优化

索引的创建

统计量的收集

ADDM报告基于AWR库,默认保存30天

CPU 瓶颈

 Oracle Net 连接管理不佳

 锁争用

 输入/输出(I/O) 能力差

 数据库实例内存结构大小不足

SQL 语句的负载过高

 PL/SQL 和Java 时间过高

 检查点负载过高及原因(例如,日志文件太小)

DECLARE
    task_name VARCHAR2(30) := 'DEMO_ADDM01';
    task_desc VARCHAR2(30) := 'ADDM Feature Test';
    task_id NUMBER;
BEGIN
    dbms_advisor.create_task('ADDM', task_id, task_name, task_desc, null);
    dbms_advisor.set_task_parameter(task_name, 'START_SNAPSHOT', 65);
    dbms_advisor.set_task_parameter(task_name, 'END_SNAPSHOT', 66);
    dbms_advisor.set_task_parameter(task_name, 'INSTANCE', 1);
    dbms_advisor.set_task_parameter(task_name, 'DB_ID', 1712582900);
    dbms_advisor.execute_task(task_name);
END;

set_task_parameter是用来设置任务参数的。START_SNAPSHOT是起始快照IDEND_SNAPSHOT是结束快照IDINSTANCE是实例号,对于单实例,一般是1,在RAC环境下,可以通过查询视图v$instance得到,DB_ID是数据库的唯一识别号,可以通过查询v$database查到。

SELECT dbms_advisor.get_task_report('DEMO_ADDM01', 'TEXT', 'ALL') FROM DUAL;--查看ADDM报告
……

DRA Data Recovery Advisor 数据恢复顾问

遇到错误时自动收集有关故障信息。主动运行Data Recovery Advisor,通常可以在用户查询或备份操作检查到故障前检测和修复故障。Data Recovery Advisor可以检测到诸如块受损的相对较小的错误,也可以检测到导致数据库无法成功启动的错误,如缺少联机重做日志文件,数据文件等。

list failure:列出Data Recovery Advisor记录的故障;

advise failure:显示建议修复的选项;

repair failure:使用rman的建议和关闭故障;

change failure:更改状态或关闭故障

内存顾问

5、内存管理 & 顾问

MMAM协调各组件内存大小的变化

⑴、自动内存管理AMMAutomatic Memory Management 

MEMORY_TARGET操作系统的角度上 Oracle 所能使用的最大内存值,动态参数。MEMORY_MAX_TARGETMEMORY_TARGET所能设定的最大值,静态参数。

AMM通过MEMORY_TARGET动态控制SGA、PGA,自动在PGA、SGA之间转换内存

alter system set MEMORY_MAX_TARGET = xxx默认=MEMORY_TARGET

alter system set MEMORY_TARGET =xxx

alter system SGA_TARGET = 0或非0指定值为最小大小

alter system PGA_TARGET = 0或非0指定值为最小大小

⑵、自动共享内存(SGA)管理 ASMAutomatic Shared Memory Management

SGA_MAX_TARGET,默认= SGA_MAX_TARGET

SGA_TARGET >0

spacer.gif设置为0或指定值为最小大小

ASSM条件,以下参数手动管理

DB_nK_CACHE_SIZE

LOG_BUFFER

buffer_pool_keep非常频繁使用的表,将表放在keep中,尽量减少检索表中的块需要的IO数量

buffer_pool_recycle

⑶、PGA自动管理,无论怎样,都自动管理

WORKAREA_SIZE_POLICYAUTO

PGA_AGGREGATE_TARGET10MB默认大小,可优化此值

spacer.gif

不建议手动调整以下值

spacer.gif

内存顾问(通过EM或动态性能视图)

V$MEMORY_DYNAMIC_COMPONENTS

V$MEMORY_RESIZE_OPS

V$MEMORY_TARGET_ADVICE

Segment Advisor

segment management auto,有关表空间存储参数

Segment Advisor 根据对象内的空间碎片化程度,给出是否应该对对象执行新的在线收缩操作的建议。提供关于段的历史增长趋势的报告,能为容量规划提供有效的信息

Undo Advisor

undo_management auto|manual

帮助管理员在 flashback 和非 flashback 特性中调整撤消表空间大小时做出正确的判断。它为管理员适当地设置 UNDO_RETENTION 提供建议,以避免快照过于陈旧的问题

Redo Logfile Size Advisor

根据FAST_START_MTTR_TARGET设置和统计分析出最佳重做日志文件大小

V$INSTANCE_RECOVERY VIEW.

MTTR Advisor

实例崩溃之后恢复时间,实例参数FAST_START_RECOVERY_TARGET控制MTTR

SQL Tuning Advisor & SQL Access Advisor

主要区别(考点): Tuning Advisor 调整每条SQL语句,Access Advisor调整所有SQL语句

SQL Tuning Advisor Recommendation维护窗口期间自动运行

分析统计信息检查陈旧或缺失的统计信息,并给出刷新或创建的建议

分析SQL收集SQL语句辅助统计信息和局部执行统计信息,放在SQL profile(自动执行)

访问路径分析新建索引、物化视图、分区的影响

分析结构重建SQL语句以查看是否生成更合适的查询计划(有限Tuning不执行此部分)

SQL Tuning Advisor

当前缓存在共享池库缓存中的SQL语句(dbconsole Top Activity)

预先创建的一组语句(SQL Tuning Sets)

从AWR中检索的语句(dbconsole Historical SQL)

单独的单条语句

SQL Access Advisor Recommendation

partitioning

index:bitmap、function-based、B-tree,不包括 index-organized table

materialized view、materialized view log

SQL Access Advisor

当前缓存在共享池库缓存中的SQL语句(dbconsole Top Activity)

预先创建的一组语句(SQL Tuning Sets)

单独的单条语句

统计信息

模式对象

SQL Tuning Advisor示例

--授予advisor权限

grant advisor to dave

--创建sql tuning task

SQL> DECLARE

my_task_name VARCHAR2(30);

my_sqltext   CLOB;

BEGIN

my_sqltext := 'select count(*) from bigtab a, smalltab b where a.object_name=b.table_name';

my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(

sql_text    => my_sqltext,

 user_name   => 'DAVE',

scope       => 'COMPREHENSIVE',

 time_limit  => 60,

 task_name   => 'tuning_sql_test',

description => 'Task to tune a query on a specified table');

 DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => 'tuning_sql_test');

END;

调整 sql tuning task 参数

begin
 dbms_sqltune.set_tuning_task_parameter
  (task_name => 'xcl_sql_tuing_task',
  parameter => 'TIME_LIMIT',
  value => 30
  );
end;

--执行sql tuning task

SQL> exec dbms_sqltune.execute_tuning_task('tuning_sql_test');

begin
dbms_sqltune.execute_tuning_task
(task_name => 'xcl_sql_tuing_task');
end;

--查看优化任务的当前状态

user_advisor_tasks/dba_advisor_tasks

--查看优化结果

SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 'tuning_sql_test') from DUAL;

--删除sql tuning task

exec dbms_sqltune.drop_tuning_task('tuning_sql_test');

SQL Access Advisor示例

创建sql access advisor task

DECLARE

  task_name VARCHAR2(200);

BEGIN

  task_name := 'LI_TASK_9';

  DBMS_ADVISOR.QUICK_TUNE(DBMS_ADVISOR.SQLACCESS_ADVISOR, task_name,

'select * from litest.litest_8 where created>sysdate-50 and created<sysdate-30 and object_id=79420');

END;

SQL> execute DBMS_ADVISOR.QUICK_TUNE(DBMS_ADVISOR.SQLACCESS_ADVISOR,'LI_TASK_9',

'select * from litest.litest_8 where created>sysdate-50 and created<sysdate-30 and object_id=79420');

显示task

SQL> SELECT rec_id, action_id, substr(command,1,30) AS command
  2  FROM user_advisor_actions
  3  WHERE task_name='LI_TASK_9';

    REC_ID  ACTION_ID COMMAND
 1          1 CREATE MATERIALIZED VIEW
         1          2 GATHER TABLE STATISTICS

--如表缺少统计信息或SQL Access Adviso无优化建议,不会生成TASK

查看report

createdirectoryEXPDP_DIRas'/dba/soft'--创建存放recommanded目录

exec DBMS_ADVISOR.CREATE_FILE(DBMS_ADVISOR.GET_TASK_SCRIPT('LI_TASK_9'),'EXPDP_DIR', 'LI_TASK_9.sql');

cat LI_TASK_9.sql

Rem  SQL Access Advisor: Version 11.2.0.3.0 - Production

Rem

Rem  Username:        SYS

Rem  Task:            LI_TASK_9

Rem  Execution date:

Rem

 CREATE INDEX "LITEST"."LITEST_8_IDX$$_03660000"-- recommanded

    ON "LITEST"."LITEST_8"

    ("OBJECT_ID","CREATED")

    COMPUTE STATISTICS;

删除task

exec DBMS_ADVISOR.DELETE_TASK('LI_TASK_9');

Database Replay

捕获每条客户端请求,记录在独立于平台的二进制文件中

SQL文本

绑定值

事务信息(含时间戳),可使重放快于、慢于、或与原始工作量持平的速度

不包括

SQL Loader 直接路径加载

Oracle stream操作、高级复制流

未基于PL/SQL的高级排队操作

闪回查询

OCI对象

未基于SQL的对象访问

分布式事务(捕获任何分布式事务,但重放时假设为本地事务)

远程DECRIBE、COMMIT

Database Replay示例

create  db_replay_dir AS ‘/u01/app/oracle/db_replay_capture/’在捕获数据库创建捕获数据存放目录

shutdown immediate; startup确保捕获时完成或回滚活动事务(可捕获正在进行的事务,但无法重放)

begin 

dbms_workload_capture.ADD_FILTER

(fname =>'FILTER_TEST',

fattribute =>'USER',

fvalue =>'TEST'); 

dbms_workload_capture.ADD_FILTER-- 可选项,捕获进行某些过滤操作

(fname =>'FILTER_INST1',

fattribute =>'INSTANCE_NUMBER',

fvalue =>'1'); 

end;

BEGIN 

DBMS_WORKLOAD_CAPTURE.start_capture -- 开始捕获

(name => 'test_capture_1',  

dir =>'DB_REPLAY_CAPTURE_DIR', 

duration => NULL);  -- 设置为NULL,需手工停止

END; 

………数据库执行一些DML SELECT等负载操作

BEGIN 

DBMS_WORKLOAD_CAPTURE.finish_capture;  

END; 

BEGIN 

DBMS_WORKLOAD_REPLAY.process_capture-- 捕获数据转换为重放数据库可接受的格式

('DB_REPLAY_CAPTURE_DIR'); 

END;

运行第一个重放前,须执行预备检查

确保重放数据库能访问重放目录

重新映射对其他生产系统的引用(数据库链接、外部表、目录对象、URLEMAIL通知等)

从生产系统将连接字符串重新映射到重放系统

BEGIN

EXEC DBMS_WORKLOAD_REPLAY.initialize_replay -- 开始重放

(replay_name => 'test_capture_1', 

replay_dir => 'DB_REPLAY_CAPTURE_DIR'); 

EXEC DBMS_WORKLOAD_REPLAY.start_replay ;

END

declare

capture_dir_id number;

curr_replay_id number;

replay_report clob;

begin

capture_dir_id := dbms.workload_replay.get_replay_info

(dir => ‘REP_CAP_DIR’);

select max(id) into curr_replay_id

from dba_workload_replays

where capture_id = capture_dir_id;

replay_report := dbms_workload_replay.report

(replay_id=> curr.replay_id,

format => dbms_workload_replay.type_text);

end;

http://blog.csdn.net/rlhua/article/details/16119193

ASM体系结构

ASM实例后台进程RBAL 协调磁盘组的磁盘活动

ARBn磁盘组的磁盘之间执行实际的区间移动操作

RDBMS实例后台进程ASMB执行数据库与ASM实例间的通信

RBAL 代表数据库打开和关闭磁盘组中的磁盘

ASM实例

有初始化参数文件spfile、密码文件,没有数据字典,实例处于nomountmount状态,不能open

仅操作系统认证,用操作系统组dba用户,以sysdba sysasm sysoper权限连接connect / as sysasm

11g ASM存储管理权限sysasmosasm组用户)与数据库管理权限sysdba分离

11g sysasmsysdba的操作系统组:dba,未来版本,估计会分离

v$pwfile_users哪些用户拥有ASM实例的sysdbasysasmsysoper权限

安装数据据时,指定ASM为数据库的文件存储选项,自动创建ASM实例

export ORACLE_SID=orcl数据库实例

sqlplus / as sysdba

export ORACLE_SID=+asmASM实例

sqlplus / as sysasm,或sysdba

实装grid架构(gridoracle可以共owner、也可以分owner),先安装ASM实例,后安装数据库

su - osasm

sqlplus / as sysasm

su - oracle

sqlplus / as sysdba

v$asm_diskgroup

v$asm_file

v$asm_template

v$asm_client

v$asm_alias

startup nomount启动实例,未加载磁盘组

startup mount加载磁盘组

startup restrict临时阻止数据库实例连接到ASM实例

ASM磁盘管理

粗略条带化所有磁盘分配条带化,分配单元 1MB

精细条带化所有磁盘分配条带化,分配单元 128K

物理磁盘 -->故障组 --> 磁盘组

引入故障组的意义:例如PC服务器的RAID卡,如果卡失败,则卡上的磁盘都将失败。同一个RAID

卡磁盘分到一个磁盘组,镜像在磁盘故障时是有用的,但卡故障时是无用的。引入故障组,将卡1的磁

盘分到故障组1和卡2的磁盘分到故障组2,然后故障组1 2分到磁盘组1,则磁盘组1的镜像是可靠的。

镜像的分布是跨故障组的,默认每个磁盘隐性分配到自己的故障组中。

外部冗余:无镜像

普通冗余:1份镜像,磁盘组内至少2个故障组

高度冗余:2份冗余,磁盘组内3个故障组

自动平衡,初始化参数 asm_power_limit 设较低,可控制对正在进行的数据库IO操作的影响

快速镜像同步,设置一个时间窗口,在此期间如果计划内或外故障时,ASM不会自动删除磁盘组中

的磁盘。ASM跟踪所有已经更改的数据块,当磁盘重新联机时,仅重新镜像已更改的块,不需重新镜

像整块磁盘

alter diskgroup data set attribute 'compatible.asm' = '11.1.0.0.0'

alter diskgroup data set attribute 'compatible.rdbms' = '11.1.0.0.0'

alter diskgroup data set attribute 'disk_repair_time' = '2.5h'

alter diskgroup data online disk data_0001

添加磁盘

alter diskgroup data add failgroup data_fg1 disk '/dev/sda8' name data_fg1_disk4

alter diskgroup data mount

alter diskgroup data dismount

alter diskgroup data check all

ASM 工具程序 asmcmd

资源管理器

使用者组

用户可以属于多个组,但仅一个组是用户初始使用者组,同一时间每个会话只能有一个组作为有效使用者组。用户首次创建会话时,默认初始使用者组作为用户的有效使用者组,可手动或自动切换用户的有效使用者组。

系统缺省使用者组

spacer.gif

资源管理计划

应用到整个实例,控制使用者组之间的资源分配。资源管理计划可以控制组所有会话的总CPU使用率、可用的并行程度、活动会话数量、撤销空间量、空闲会话时间、一次调用的最长执行时间。数据库可以存在多个计划,任一时间只能有一个计划被激活,资源管理计划可手工或用调度程序自动激活。

系统缺省资源理计划

spacer.gif

spacer.gif

spacer.gif

alter system set resource_manager_plan

该参数可手动、scheduler自动、编程方式DBMS_RESOURCE_MANAGER.SWITCH_PLAN

考点:与参数resource_limits无关,此参数通过用户profile控制资源

资源管理器管理工具database controlpl/sql API

dbms_resource_mananger_privs将用户放到使用者组、授予管理资源管理器必需的权限

dbms_resource_manager创建使用者组、计划、指令、挂起区域

考点:ADMINISTATOR RESOURCE MANAGERdbms_resource_manager_privs授予和取消,grant revoke不能

案例1

创建用户

create user bob identified 1234

grant connect to bob

create user alice identified 1234

grant connect to alice

create user mike identified 1234

grant connect to mike

create user smith identified 1234

grant connect to smith

创建使用者组

exec dbms_resource_manager.create_cosumer_group('oltp','telephone sales')

exec dbms_resource_manager.create_cosumer_group('dss','analyst')

exec dbms_resource_manager.create_cosumer_group('batch','admin')

exec dbms_resource_manager.delete_consumer_group('dss')删除使用者组

将用户添加到使用者组

exec dbms_resource_manager_privs.grant_switch_consumer_group(

grantee_name=>'bob',consumer_group=>'oltp',grant_option=>false)

bob用户添加到oltp使用者组,未授予bob向此组添加其他用户权限

exec dbms_resource_manager_privs.grant_switch_consumer_group(

grantee_name=>'bob',consumer_group=>'dss',grant_option=>false)

设置用户初始使用者组

exec dbms_resource_manager.set_initial_consumer_group('bob','oltp')

bob用户属于oltp dss,为其指定初始使用者组

exec dbms_resource_manager.set_initial_consumer_group('alice','dss')

exec dbms_resource_manager.set_initial_consumer_group('mike','batch')

exec dbms_resource_manager.set_initial_consumer_group('smith','oltp')

创建挂起区域

exec dbms_resource_manager.create_pending_area;-- 

创建资源管理计划 daytime

exec dbms_resource_manager.create_plan(

plan=>'daytime',comment=>'plan for normal working hours');

exec dbms_resource_manager.create_directive(

plan=>'daytime',group_or_subplan=>'sys_group',cpu_p1=>100,comment=>'sys_group users top priority');--daytime资源管理计划中,sys_group优先级第一,CPU使用率100%

exec dbms_resource_manager.create_directive(

plan=>'daytime',group_or_subplan=>'oltp',cpu_p2=>100,comment=>'oltp users next priority');

--daytime资源管理计划中,oltp组优先级第二,CPU使用率100%

exec dbms_resource_manager.create_directive(

plan=>'daytime',group_or_subplan=>'dss',cpu_p3=>50,comment=>'dss users third priority');

exec dbms_resource_manager.create_directive(

plan=>'daytime',group_or_subplan=>'batch',cpu_p3=>50,comment=>'batch users third priority too');

--daytime资源管理计划中,dss batch组优先级并列第三,CPU使用率各50%

exec dbms_resource_manager.create_directive(

plan=>'daytime',group_or_subplan=>'other_groups',cpu_p4=>100,comment=>'other users last priority');

考点:每个级别总CPU不能>100%,否则挂起区域无法验证,无法保存到数据字典,允许少于100%

每个计划须包括一条针对other_groups组指令,否则挂起区域无法验证,也无法保存到数据字典

创建资源管理计划 nighttime

exec dbms_resource_manager.create_plan(

plan=>' nighttime ',comment=>'plan for night');

exec dbms_resource_manager.create_directive(

plan=>'nodaytime',group_or_subplan=>'sys_group',cpu_p1=>100,comment=>'sys_group users top priority');--nighttime资源管理计划中,sys_group优先级第一,CPU使用率100%

exec dbms_resource_manager.create_directive(

plan=>'nighttime',group_or_subplan=>'dss',cpu_p2=>50,comment=>'dss users next priority');

exec dbms_resource_manager.create_directive(

plan=>'nighttime',group_or_subplan=>'batch',cpu_p2=>25,comment=>'batch users next priority too');

exec dbms_resource_manager.create_directive(

plan=>'nighttime',group_or_subplan=>'oltp',cpu_p2=>25,comment=>'oltp also users next priority');

--nighttime资源管理计划中,dss batch oltp组并列第三,dss CPU使用率各50%oltp batch25%

exec dbms_resource_manager.create_directive(

plan=>'nodaytime',group_or_subplan=>'other_groups',cpu_p3=>100,comment=>'other users last priority');

验证和保存资源管理计划

exec dbms_resource_manager.validate_pending_area验证挂起区域

exec dbms_resourece_manager.submit_pedning_area验证通过后,才能将计划保存到数据字典

激活资管理计划

alter system set resource_manager_plan=daytime手工激活daytime计划

切换用户使用者组

dbms_resource_manager.switch_consumer_group_for_sess(

session_id => '56',

session_serial => '106',

consumer_group => 'low_group');

基于会话的唯一标识(session_id  session_serial 共同组成)切换,v$session 视图中可查

dbms_resource_manager.switch_consumer_group_for_user(

user => 'user1',

consumer_group => 'low_group')

基于会话所属的用户切换(将用户下的所有会话切)

以上两种办法需资源管理器管理权限,通常由DBA执行

dbms_session.switch_current_consumer_group(

new_consumer_group => 'low_group');

用户切换自己当前会话,需特定权限

dbms_resource_manager_privs.grant_switch_consumer_group(-- 授权

grantee_name => 'user1',

consumer_group => 'low_group',

grant_option => 'false');

dbms_resource_manager_privs.revoke_switch_consumer_group(--取消授权

grantee_name => 'user1',

consumer_group => 'low_group');

自动切换(基于CPUIO阈值)

永久性切换一个会话,适用最终用户有一个专用会话的客户端--服务器环境

一次调用期间切换,适用于用户连接到应用服务器,应用服务器连接数据库的环境

使用者组自适应映射

基于会话的属性将会话动态分配给使用者组

dbms_resource_manager.set_consumer_group_mapping

attribute => oracle_user,

value => 'user1,

consumer_group => 'oltp');

当会话的oracle用户属性值为user1时,将其分配给使用者组oltp

由于可能会出现某会话的两个属性分别满足两个不同的映射规则,可以设定各个属性的优先权dbms_resource_manager.set_mapping_priority(

oracle_user => 1,

client_os_user => 2);

活动会话池

限制并行程度

执行时间控制作业

空闲时间终止会话

撤销数据

调度程序

调度作业存储在数据字典的一个表中,DBA_SCHEDULER_JOBS可查询此表。作业队列协调器后台进程CJQ0监视此表,根据需要启动作业队列进程Jnnn运行作业。如有任何定义的、活动的调度程序作业,总是自动启动CJQ0进程。参数 JOB_QUEUE_PROCESSES=0,调度程序无法运行,默认1000

调度程序对象

作业由执行的动作和执行动作的时间组成

程序作业中执行的动作,多个作业可调用同一个程序

时间表作业中执行的时间,多个作业可调用同一个时间表

窗口指定时间打开,持续一段时间之后关闭。

作业类一个或多个作业集合,常与Resource Manager使用者组关联或用于控制日志记录级别

权限创建job的权限

作业链一组有依赖关系程序

实例一:作业的第一种形式,基于时间表的作业

begin

dbms_scheduler.create_job(

job_name=>'backup',

job_style=>

job_type=>'stored_procedure',plsql_block|stored_procedure|executable|chain

job_action=>'backup_procedure',

-- plsql_blockjob_action是单条SQL语句或PL/SQL

stored_procedurejob_action是一个存储过程

executablejob_action 能够在操作系统命令运行

chainjob_action chain

start_date=>'',

repeat_interval=>'',

end_date=>

job_class=>与优化权有关,且集成调度程和Resource Manager

enable=>'',默认flase,须先启用后执行

auto_drop=>'',默认true,到期立即删除

comments=>'');

end;

实例二:作业的第二种形式,基于事件的作业

begin

dbms_scheduler.create_job(

job_name=>'backup',

job_style=>

job_type=>'stored_procedure',

job_action=>'backup_procedure',

start_date=>'',

event_condition

queue_spec

end_date=>

job_class=>与优化权有关,且集成调度程和Resource Manager

enable=>'',默认flase,须先启用后执行

auto_drop=>'',默认true,到期立即删除

comments=>'');

end;

实例三:作业的第三种形式,动作详细信息替换为程序,时间表详细信息替换为调度

创建程序

procedure create_program(

)

创建时间表

procedure create_schedule(

)

begin

dbms_scheduler.create_job(

job_name=>'backup',

program_name

schedule_name

job_class=>与优化权有关,且集成调度程和Resource Manager

enable=>'',默认flase,须先启用后执行

auto_drop=>'',默认true,到期立即删除

comments=>'');

end;

exec dbms_scheduler.disable(' 作业名 ')

exec dbms_scheduler.enable(' 作业名 ')

exec dbms_scheduler.drop(' 作业名 ')

作业链举例

创建一个链

exec dbms_scheduler.create_chain(chain_name=> 'mychain');

定义链步骤

exec dbms_scheduler.define_chain_step(chain_name=>'mychain',

step_name=>'step1',program_name=>'prg1');

exec dbms_scheduler.define_chain_step(chain_name=>'mychain',

step_name=>'step2',program_name=>'prg2');

exec dbms_scheduler.define_chain_step(chain_name=>'mychain',

step_name=>'step3',program_name=>'prg3');

定义执行步骤的规则

exec dbms_scheduler.define_chain_rule(chain_name=>'mychain',

rule_name=>'rule1',condition=>'step1 succeeded'

action=>'start step2');

exec dbms_scheduler.define_chain_rule(chain_name=>'mychain',

rule_name=>'rule2',condition=>'step1 faild'

action=>'start step3');

启用链

exec dbms_scheduler.enable('mychain')

创建作业(引用链)

exec dbms_scheduler.create_job(job_name='job1',

job_type=>'chain',

job_action=>'mychain'

......

关于窗口

作业可通过指定的时间或时间表启动。oracle推出一个维护窗口概念,窗口在特定时间打开,持续一段时间之后关闭。指定某个窗口中运行的作业可根据oracle的判断在该窗口的任何时刻启动。窗口本身可通过时间表重复打开。窗口结合Resource Manager....

考点:窗口和时间表共享名称空间,不能同名

相同优先权的多个重叠窗口,先打开的得取优先权

关于轻量级作业

创建和启动作业涉及数据字典,不可能短时间创建大量作业(几秒数百个),可能过创建轻量级作业,比标准作业简单,必须基于程序。不能Database controlcreate jobauto_drop总为trueend_date默认为当前时间戳。

轻量级作业例子

exec dbms_scheduler.create_job(

job_name

program_name=>

job_style=>'lightweight'

enable=>true创建后立即运行

end_date=

repeat_innterval);

使用类、窗口与Resource Manager

考点:create_job创建作业时无法指派优先权,须在后面用APIset_attribute

job1在其类中优先权1job2在其类中优先权5job2的类位于拥有更高Resource Manager先权的使用者组内,job2优先执行

全球化

oracle支持全球化,可在5个级别上设置。

数据库、实例、客户端环境、会话、语句全球化设置的各个级别的优先顺序

在服务器端实例>会话

在客户端语句>会话>客户端环境

oracle用户进程启动时,进程查看其所运行的环境获得全球化的默认设置。用户进程按环境变量nls_lang(完整规范语言、地区、字符集)显示消息和格式化数据,用户进程用nls_lang标准输入,服务器按数据库的全球化设置存储。服务器与客户端全球化设置之间的转换由Oracle Net(双任务层 two-task command layer)完成。

数据库级别nls_database_parameters

实例级别nls_instance_parameters 静态参数

客户端级别nls_lang

会话级别会话级别的规范优先于服务器端的数据库和实例级别的设置,重写用户的环境变量

v$nls_parameters

nls_session_parameters

alter session set nls_language='american'修改会话级别的语言

Locale Bulder 自定义全球化环境

1、字符集

数据库存储的数据必须被编码为字符集,软件产品可以用操作系统提供的字符集,或用自己的字符集。

oracle提供数据库字符集和National Character Set

数据库字符集

默认用7位的ASCIIEBCDIC

create database 数据库字符集US7ASCII National Character Set字符集AL16UTF16

DBCA 数据库字符集=操作系统字符集

也可用Unicode字符集作为实际的数据库字符集,支持UTF8 AL32UTF8(oracle推荐)

须将US7ASCIIEBCDIC作为数据库字符集的子集,因存储SQLPL/SQL是用这两种字符编写

National Character Set

用于存储nvarchar2 nclob nchar数据类型列,仅支持AL16UTF16UTF8两种Unicode字符集

修改字符集(理论上可以,实际无人敢搞)

数据库字符集扫描程序 database character set scanner,csscan 扫描数据文件

语言与字符集文件扫描程序 language and character set file scanner,lcsscan仅适用纯文本

2、语言

语言支持:语言决定默认显示错误消息的语言、默认的日期语言、默认排序顺序

地区支持:地区决定默认日周编号、借贷符号、日期格式、数字分隔符、组分隔符、货币符号

排序:oracle默认用二进制排序

v$nls_valid_values显示可支持的语言、排序、地区

nls_language变量,设置显示错误消息的语言

nls_date_language变量,设置日期与月份格式

nls_sort变量,设置语言排序

nls_territory变量,设置地区

v$nls_valid_values查看支持的语言和地区

3、时区v$timezone_names

创建数据库时如未指定时区,则用主机操作系统时区

alter database set time_zone=

客户端默认用客户端操作系统时区

ora_stdz 

会话级别改变时区 alter session set time_zone=

语句级别 timestamp with local time zone存储为数据库时区,显示时转换为客户端时区

timestamp with time zone存储是不用数据库时区,带时间标识符

智能基础结构

警报

用户设置的阈值存在AWRMMON后台进程实时监视服务器,将当前状态和阈值比较,超出即报警

v$metricname200多个指标及阈值信息

execute dbms_server_alert.set_threshold(

警报种类

有状态警报

基于持久保存且可修复的条件,如表空间使用、挂起会话数量、执行完SQL语句需要的平均时间

默认显示在database console,和写入DBA_OUTSTANDING_ALERTS视图

DBA修改了问题或自然发展过程中消失,写入DBA_ALERT_HISTORY

无状态警报

基于事件,事件发生后又消失了,如查询因快照过旧而失败、形成死锁的事务

直接进入DBA_ALERT_HISTORY

警报通知

默认显示在database console 首页

查询DBA_OUTSTANDING_ALERTSDBA_ALERT_HISTORY视图

database control中配置smtpsms通知

考点:由MMON进程引发,Enterprise Manager仅是读取(接收)警报,也可通过第三方程序读取

Automatic Diagnostic Repository ADR

11g 实例诊断信息,目录 DIAGNOSTIC_DEST,每个实例、ASM实例、RAC中的单个实例都有自己的ADR_BASE

如指定DIAGNOSTIC_DEST ADR_BASE为指定位置

如未指定则ORACLE_BASEADR_BASE位置,

如未设oracle_base,则ADR_BASEORACLE_HOME/log

spacer.gif

ADR_HOME/alertXML格式副本alertSID.log

ADR_HOME/trace

Alert.log

数据库启动,关闭时间

非默认初始化参数

LGWR正在写的日志序列号

日志的切换信息

所执行的ALTER 语句

创建的表空间和还原段

后台进程追踪文件:记录所有后台进程遇到的错误

用户进程追踪文件:用户进程创建,跟踪用户SQL语句的统计信息,包含用户的错误信息

ADR_HOME/cdump核心转储,特定于平台的一次性二进制内存转储

与跟踪文件不同,路路文件包含诊断运行进程的问题的连续输出信息

ADR_HOME/incident/incdir_n事件转储

ADRCI

ADR 命令行工具。

查询ADR内容,创建脚本,将事件和问题信息打ZIP包发送给Oracle Support。显示所有问题和

Health Monitor

数据库健康监视,11g新特性。检查数据库组件比如文件系统、内存、事务完整性、检查数据文件坏块,redo检查,验证数据字典完整性等方面。严重错误发生时,数据库会自动运行Health Monitor诊断问题,也可以手工运行,健康监视日志放入ADR中。

nomount运行DB Structure Integrity,检查控制文件完整性

mount运行DB Structure Integrity,检查控制文件、联机重做日志文件、数据文件头完整性

运行Redo Integrity Check,检查联机和归档日志文件完整性及是否受损

open扫描每个数据块是否受损检查,并检查数据字典和撤销段的完整性

BEGIN
         DBMS_HM.RUN_CHECK('Dictionary Integrity Check', 'my_run');
 END;

BEGIN
         DBMS_HM.RUN_CHECK (
         check_name => 'Transaction Integrity Check',
         run_name => 'my_run',
         input_params => 'TXN_ID=7.33.2');
END;

SQL>SELECT DBMS_HM.GET_RUN_REPORT('HM_RUN_1061')  FROM    DUAL;--相看HM报告

adrci> show hm_run-- ADRCI查看HM报告

Advisor Central -》Checkers-》Runs -》View Report-- OEM查看HM报告

 V$HM_RUN

V$HM_FINDING

V$HM_RECOMMENDATION

Support Workbench

查看问题和事件的详细信息

被动或主动运行Health Monitor

为服务请求生成附加诊断数据

运行顾问程序帮助解决问题或事件

打包所有必需的诊断和支持数据,以便用MetaLink服务提交给Oracle Support

跟踪服务请求,问题或事件解决后将其关闭

问题关键错误,一个或多个事件组成,每个问题有问题关键词(一个文本字符串,含错误代码)

事件出现的问题,如多个事件的问题关键字相匹配,可认为这些事件有相同的根源

事件发生时,数据执行以下动作:

alert.log中记录

EM显示警报

电邮发送(可选)

收集跟踪文件和其他事件信息

为所有事件添加事件ID标记

创建并转储在ADR_HOME/incident/incdir_n

事件包一个或多个事件和问题的数据集合,以ZIP格式用为SR上载的到oracle support service

补丁

临时(Interim)补丁程序

为数据库精确版本级别修复一个具体问题,不必完全集成也不必回归测试

CPUCritical Patch Update关键补丁更新)补丁程序,常包含安全补丁程序

特定发布版级别的累积补丁程序,包含所有附属补丁程序,应全面集成和回归测试

补丁程序集(Patch sets

累积的产品修补集合,增加产品的发布版本级别 11.1.0.6à11.1.0.7

Patch Advisordatabase console集成,需和oracle连通

Opatch补丁管理程序,命令或database console

Pach advisor需与oracle连接,定期执行检查作业

Hot Patching不停机

利用oradebug接口安装和启用

消耗部分内存

IPS创建、添加、生成ZIP