OCP11g IZO-053 Ⅱ

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章