數據庫毫無疑問是Oracle證書的天下了。盡管數據庫可能隨著目前網絡業的蕭條,市場需求會有所減少,但是Oracle的產品仍然是最廣泛應用的數據庫產品之壹,廠商的認證證書自然也是身價百倍。 OCP(OracleCertiliedProfessional)是由Oracle公司頒布並實施的壹項權威的專業技術標準。它是專門針對那些能夠滿足對Oracle核心產品的服務與支持,並具有嫻熟的操作能力與廣泛理論知識的專業人士。壹經認證,在行業內的專業資格將被確認,從而使個人或企業更具競爭實力。 壹次性通過Oracle認證專家計劃包含了兩個目前IT行業十分熱門的認證角色,即數據庫管理員(DBA-DatabaseAdministrator)和應用程序開發員(DEV-ApplicationDeveloper)。Oracle證書的主要課程是Oracle7和Oracle8,應試者可以任選壹門主要課程,然後參加5—6門分支課程的考核,壹個有經驗的在職者至少要花上6—12個月才能通過Oracle的數據庫認證。OracLe認證是各項純技術認證中最為昂貴的,總費用在8000—1.5萬美元左右。
分類: Oracle
在Oracle 9中偽造存儲概要
當妳知道如何通過給壹段DML語句添加提示就可以讓它運行的快很多,但是妳卻沒有訪問源代碼並將提示放到適當位置的途徑, 妳會怎麽做?
在上壹篇文章中,我展示了妳可以如何用存儲概要(也被稱為執行計劃穩定性)來驅使數據庫引擎為妳做這種工作.
壹個存儲概要由兩個組件組成(寬泛地講)-壹個妳希望控制的SQL語句,壹組每當Oracle發現這條SQL被優化都將在它上面應用的提示.這兩個組件都被保存在壹個被稱為outln的數據庫schema中.
我們可以使用壹組如圖-1中類似的查詢語句來檢查保存在其中的SQL語句,以及附著在這條SQL語句上的提示.
1 select name, used, sql_text
2 from user_outlines
3 where category = ‘DEFAULT’
4 ;
5
6 select stage, node, hint
7 from user_outline_hints
8 where name = ‘{one of the names}’
9 ;
Figure 1 Examining stored outlines.
在前面的文章中,我介紹了這樣壹種想法來欺騙系統, 使用合法的方法創建壹個存儲概要, 接著,使用壹個文本相似的但已經添加過提示的語句來創建壹個存儲概要,最後,使用壹組SQL語句來交換這兩個存儲概要的實際結果來修復存儲概要.
當時,我曾提到這種方法對Oracle 8來講或許是安全的,但是由於在新版本中引入的變化, 在Oracle 9中可能會導致問題.
這篇文章將對這些變化進行考查, 介紹壹種合法的方法來得到妳想要的壹組存儲到outln中的提示,用來解決妳的那些問題語句.
相關變化
如果妳登錄到outln schema(在Oracle 9中它默認是鎖住的)查看可用的表清單,妳將發現Oracle 9比Oracle 8多出來壹張表. 這些表為:
ol$ SQL語句
ol$hints 提示表
ol$nodes 查詢塊
第三張表是壹張新表,被用來將提示列表與這條SQL語句(壹份內部重寫的版本)的多個不同查詢塊.妳還將發現,提示列表(ol$hints)也被加強了,其中還包括文本長度與偏移量的細節信息.
圖2為這三張表的詳細描述,用星號標註了Oracle 9中出現的新字段.
01 ol$
02
03 OL_NAME VARCHAR2(30)
04 SQL_TEXT LONG
05 TEXTLEN NUMBER
06 SIGNATURE RAW(16)
07 HASH_VALUE NUMBER
08 HASH_VALUE2 NUMBER ***
09 CATEGORY VARCHAR2(30)
10 VERSION VARCHAR2(64)
11 CREATOR VARCHAR2(30)
12 TIMESTAMP DATE
13 FLAGS NUMBER
14 HINTCOUNT NUMBER
15 SPARE1 NUMBER ***
16 SPARE2 VARCHAR2(1000) ***
17
18 Ol$hints
19
20 OL_NAME VARCHAR2(30)
21 HINT# NUMBER
22 CATEGORY VARCHAR2(30)
23 HINT_TYPE NUMBER
24 HINT_TEXT VARCHAR2(512)
25 STAGE# NUMBER
26 NODE# NUMBER
27 TABLE_NAME VARCHAR2(30)
28 TABLE_TIN NUMBER
29 TABLE_POS NUMBER
30 REF_ID NUMBER ***
31 USER_TABLE_NAME VARCHAR2(64) ***
32 COST FLOAT(126) ***
33 CARDINALITY FLOAT(126) ***
34 BYTES FLOAT(126) ***
35 HINT_TEXTOFF NUMBER ***
36 HINT_TEXTLEN NUMBER ***
37 JOIN_PRED VARCHAR2(2000) ***
38 SPARE1 NUMBER ***
39 SPARE2 NUMBER ***
40
41 ol$nodes (completely new in 9)
42
43 OL_NAME VARCHAR2(30)
44 CATEGORY VARCHAR2(30)
45 NODE_ID NUMBER
46 PARENT_ID NUMBER
47 NODE_TYPE NUMBER
48 NODE_TEXTLEN NUMBER
49 NODE_TEXTOFF NUMBER
ORACLE STREAMS存儲過程中的壹些參數
1,maintain_mode參數
可取golbal或transportable tablepsaces,當該參數取global時,表示streams進行全庫復制,否則表示streams進行表空間復制,需要在tablespace_names參數中指定待復制的壹個或多個表空間。
2,perform_actions參數
此參數設置為true時,streams配置腳本執行過程將記錄在dba_recoverable_script字典表,如果pre_instantiation_setup 執行時遇到錯誤,可以通過執行dbms_streams_adm的recover_operation過程在更正錯誤後繼續執行streams復制配置。參數為false的話則生成配置腳本到script_directory_object/script_name參數指定的位置。
3,source_database/destination_database參數
是指向源庫與目標庫的database link,必須確保正確,否則pre_instantiation_setup過程將會失敗,報ora-23621錯誤,如果錯誤發生,可以利用dbms_streams_adm的recover_operation過程回滾或者是清除上次操作,更正錯誤後再執行pre_instantiation_setup過程。
4,bi_directional
此參數設置為true時,表示streams是多源復制,即目標庫與源庫雙向復制對象與數據,否則只從源庫向目標庫復制對象與數據。
5,include_ddl
此參數表示復制的過程中,也復制DDL操作。
6,start_processes
此參數指streams配置完成後啟動捕獲、傳播及應用進程。
7,exclude_schemas
此參數指出全庫復制時不參與復制的用戶,如果有多個用戶不參加復制的話,可以用逗號分開,*號則排除所有schemas,NULL則不排除任何schemas(sys/system/stxsys始終不復制),該參數只有在全庫復制時有效。
8,exclude_flags
這裏表示多源復制的時候,為了避免redo entry的遞歸應用問題,應當避免的壹些操作。
pre_instantiation_setup存儲過程示例:
SQL>connect strmadmin/strmadmin
SQL>declare
2 empty_tbs dbms_streams_tablespace_adm.tablespace_set;
3 begin
4 dbms_streams_adm.pre_instantiation_setup(
5 maintain_mode => ‘global’,
6 tablespace_names => enpty_tbs,
7 source_database => ‘dbsour.net’,
8 destination_database => ‘dbdest.net’,
9 perform_actions => true,
10 bi_directional => true,
11 include_ddl => true,
12 start_processes => true,
13 exclude_schemas => NULL,
14 exclude_flags => dbms_streams_adm.exclude_flags_unsupported + dbms_streams_adm.exclude_flags_dml + dbms_streams
15 _adm.exclude_flags_ddl);
16 end;
17 /