2018年6月6日 星期三
ORACLE 11G 設定帶有參數的 SCHEDULER JOB
---------- 建立一個 SCHEDULER 裏頭的 PROGRAM 先設定變數型態
---------- 以下範例的 PROCEDURE 是需要帶入兩個參數 , 這邊先設定變數型態 一個是 NUMBER 另外一個是 VARCHAR2
BEGIN
SYS.DBMS_SCHEDULER.CREATE_PROGRAM
(
program_name => 'DBA_TN_REPORT_P'
,program_type => 'STORED_PROCEDURE'
,program_action => 'DBA_TN_REPORT'
,number_of_arguments => 2
,enabled => FALSE
,comments => 'DBA_TN_REPORT'
);
SYS.DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT
(
program_name => 'DBA_TN_REPORT_P'
,argument_name => 't_thread_no'
,argument_position => 1
,argument_type => 'NUMBER'
,default_value => ''
);
SYS.DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT
(
program_name => 'DBA_TN_REPORT_P'
,argument_name => 't_over_night'
,argument_position => 2
,argument_type => 'VARCHAR2'
,default_value => ''
);
SYS.DBMS_SCHEDULER.ENABLE
(name => 'DBA_TN_REPORT_P');
END;
/
---------- 建立一個 SCHEDULER 設定排程, 且這邊帶入參數
BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB
(
job_name => 'DBA_TN_REPORT_JOB'
,start_date => TO_TIMESTAMP_TZ('2017/04/14 01:54:00.000000 +08:00','yyyy/mm/dd hh24:mi:ss.ff tzr')
,repeat_interval => 'FREQ=minutely; INTERVAL= 3'
,end_date => NULL
,program_name => 'DBA_TN_REPORT_P'
,comments => 'DBA_TN_REPORT_P'
);
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( name => 'DBA_TN_REPORT_JOB'
,attribute => 'RESTARTABLE'
,value => FALSE);
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( name => 'DBA_TN_REPORT_JOB'
,attribute => 'LOGGING_LEVEL'
,value => SYS.DBMS_SCHEDULER.LOGGING_OFF);
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
( name => 'DBA_TN_REPORT_JOB'
,attribute => 'MAX_FAILURES');
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
( name => 'DBA_TN_REPORT_JOB'
,attribute => 'MAX_RUNS');
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( name => 'DBA_TN_REPORT_JOB'
,attribute => 'STOP_ON_WINDOW_CLOSE'
,value => FALSE);
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( name => 'DBA_TN_REPORT_JOB'
,attribute => 'JOB_PRIORITY'
,value => 3);
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
( name => 'DBA_TN_REPORT_JOB'
,attribute => 'SCHEDULE_LIMIT');
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( name => 'DBA_TN_REPORT_JOB'
,attribute => 'AUTO_DROP'
,value => FALSE);
--- 這邊帶入想要的值進去
SYS.DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE
( job_name => 'DBA_TN_REPORT_JOB'
,argument_name => 't_thread_no'
,argument_value => 1);
SYS.DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE
( job_name => 'DBA_TN_REPORT_JOB'
,argument_name => 't_over_night'
,argument_value => 's');
END;
/
ORACLE RAC ASM 出現 壞BLOCK
線上業務系統的DB,,, 突然被告知無法寫資料進去某張table
本以為是 table block 壞掉,,
但被RD人員無法執行的SQL是 insert into .... select * from
噴出來的錯誤訊息是
### Cause: java.sql.SQLException: ORA-01578: ORACLE data block corrupted (file # 39, block # 288386)
查了一下 此 block 的 object 是什麼
select * from dba_extents where file_id = 39 and block_id >= 288381 and block_id <= 288386 +10
還好此 object 是 index .... 重新 rebuild 就可以正常運作
之後使用dbv 檢測一下此datafile
* 這邊的userid 必須可以登入 asm 且需要 sysasm 權限
[grid@db-15 ~]$ dbv file='+***_***01/**/datafile/l****.285.9909' userid=sysasm/******
DBVERIFY: Release 11.2.0.4.0 - Production on Wed Jun 6 15:25:28 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = +***_***01/**/datafile/l****.285.976987909
DBVERIFY - Verification complete
Total Pages Examined : 1310720
Total Pages Processed (Data) : 431638
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 345145
Total Pages Failing (Index): 0
Total Pages Processed (Other): 4632
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 529305
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 0 (0.0)
沒有看到 Total Pages Marked Corrupt 筆數
...............
select * from v$database_block_corruption;
也沒有資料了
select * from v$database_block_corruption;
也沒有資料了
比較可惜的是 此案例是線上生產DB, 比較急著要處理 ,就沒有完整紀錄處理前後DB的狀態
案例二:
出現了也是 相關錯誤, 但不是index ,
而是 partition table 的extent出現錯誤
這不過是已經沒資料的 partition table , 剛好可以直接砍掉,
在重新執行一次 就沒問題
看來搜尋到空的partition table 的壞掉區段 他也會爆錯
出現了也是 相關錯誤, 但不是index ,
而是 partition table 的extent出現錯誤
這不過是已經沒資料的 partition table , 剛好可以直接砍掉,
在重新執行一次 就沒問題
看來搜尋到空的partition table 的壞掉區段 他也會爆錯
訂閱:
文章 (Atom)