日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Oracle手工生成段建議(Segment Advisor)

系統(tǒng) 2245 0
一、描寫敘述
從oracle 10g開始,oracle引入了段顧問(Segment Advisor),用于檢查數(shù)據(jù)庫(kù)中是否有與存儲(chǔ)空間相關(guān)的建議,而且從10gR2開始,oracle自己主動(dòng)調(diào)度并執(zhí)行一個(gè)段顧問作業(yè),定時(shí)分析數(shù)據(jù)庫(kù)中的段,并將分析結(jié)果放在內(nèi)部表中??墒欠浅6嗲闆r下, 作為DBA,我們都會(huì)將oracle自帶的各種調(diào)度作業(yè)(統(tǒng)計(jì)信息收集、段顧問、SQL顧問等等)禁用,進(jìn)而通過(guò)手工進(jìn)行控制執(zhí)行類似作業(yè)(或者為了節(jié)省資源)。因此非常多情況下,我們都沒實(shí)用到段顧問這個(gè)非常實(shí)用的功能。這篇文章就是講述在 表對(duì)象和表空間級(jí)別 通過(guò)手工執(zhí)行段顧問來(lái)生成段建議的方法。
二、作用
  • 優(yōu)化SQL語(yǔ)句時(shí),能夠幫助我們更準(zhǔn)確的推斷是否須要回收表內(nèi)的碎片空間。假設(shè)不執(zhí)行段顧問建議,我們必須得通過(guò)create table as select一張暫時(shí)表方式才干準(zhǔn)確的得知是否有必要進(jìn)行表空間回收,以及空間的回收率等等信息。
  • 優(yōu)化SQL語(yǔ)句時(shí),能夠幫助我們準(zhǔn)確推斷是否須要重建或者move表來(lái)消除表內(nèi)的行鏈接。能夠想想,假設(shè)沒有這個(gè)建議,我們又須要做多少工作來(lái)推斷。
  • 日常主動(dòng)維護(hù)時(shí),能夠幫助我們主動(dòng)發(fā)現(xiàn)表內(nèi)碎片較多和行鏈接較嚴(yán)重的表對(duì)象列表,有助于我們提前處理,避免類似問題的發(fā)生。
三、段顧問的分析結(jié)果類型
  • 適合進(jìn)行段收縮操作來(lái)回收空間的段
  • 具有大量行鏈接的段
  • 可能會(huì)從OLTP壓縮中受益的段
四、手工執(zhí)行段顧問步驟
  1. 創(chuàng)建一個(gè)段顧問任務(wù)
  2. 為這個(gè)任務(wù)分配一個(gè)對(duì)象(指定以表對(duì)象或者表空間級(jí)別來(lái)運(yùn)行,同一時(shí)候制定username和表名或者表空間名)
  3. 設(shè)置任務(wù)參數(shù)(運(yùn)行段顧問運(yùn)行時(shí)的一些參數(shù),比如:運(yùn)行時(shí)長(zhǎng)限制參數(shù)、僅生產(chǎn)與空間相關(guān)建議/全部類型的對(duì)象生成建議)
  4. 運(yùn)行這個(gè)任務(wù)
五、手工執(zhí)行段顧問的代碼
declare
??my_task_id? number ;
??obj_id? number ;
??my_task_name?varchar2( 100 );
??my_task_desc?varchar2( 500 );
begin
??my_task_name?: = 'advisor_test?tab?Advice' ; ? - - 執(zhí)行任務(wù)名,能夠隨意指定,只是建議為有意義的名稱
??my_task_desc?: = 'Manual?Segment?Advisor?Run' ; - - 執(zhí)行任務(wù)描寫敘述,能夠隨意指定,只是建議為有意義的描寫敘述
- - - - - step? 1
?? / * ?創(chuàng)建一個(gè)段顧問任務(wù)? * /
??dbms_advisor.create_task(
??advisor_name? = > ? 'Segment?Advisor' , ? - - 執(zhí)行段顧問任務(wù)這個(gè)參數(shù)必須指定為Segment?Advisor
??task_id? = > ?my_task_id,
??task_name? = > ?my_task_name,
??task_desc? = > my_task_desc);
- - - - - step? 2
?? / * ?為這個(gè)任務(wù)分配一個(gè)對(duì)象? * /
??dbms_advisor.create_object(
??task_name = > my_task_name,
??object_type = > 'TABLE' , ? ? ?? - - 指定對(duì)象級(jí)別,假設(shè)為表對(duì)象則為 'TABLE' ,假設(shè)為表空間級(jí)別則為 'TABLESPACE'
??attr1 = > 'DBMON' , ? ? ? ? ? ?? - - - 假設(shè)在表對(duì)象級(jí)別執(zhí)行,這個(gè)屬性為username,表空間級(jí)別這個(gè)屬性為表空間名字
??attr2? = > ? 'ADVISOR_TEST' , ? ? - - - 假設(shè)在表對(duì)象級(jí)別執(zhí)行,這個(gè)屬性為表名,表空間級(jí)別這個(gè)屬性為 null
??attr3? = > ? NULL ,
??attr4 = > null ,
??attr5 = > null ,
??object_id = > obj_id);
- - - - - step? 3
/ * ?設(shè)置任務(wù)參數(shù)? * /
??dbms_advisor.set_task_parameter(
??task_name? = > ?my_task_name,
/ * ?設(shè)置段顧問執(zhí)行參數(shù) "ecommend_all" 的值,為 TRUE 則為全部類型的對(duì)象的生成建議,為 FALSE 則僅生成與空間相關(guān)的建議? * /
/ * ?還有一個(gè)滾問執(zhí)行參數(shù) "time_limit" ,制定顧問執(zhí)行的時(shí)間限制,默認(rèn)值為無(wú)限制? * /
?? parameter = > 'recommend_all' , ? - - -
?? value = > 'TRUE' );
- - - - - step? 4
/ * ?運(yùn)行這個(gè)任務(wù)? * /
??dbms_advisor.execute_task(my_task_name);
end ;
/

六、查詢段顧問分析結(jié)果的語(yǔ)句
( 1 )
select ?
?? / * ? "|chr(13)||chr(10)" 為windows平臺(tái)的換行符,假設(shè)是linux等其他平臺(tái),請(qǐng)用 "chr(10)" 取代? * /
? 'Task?name?????:' ||f.task_name||chr( 13 )||chr( 10 )|| ?
? 'Segment?name??:' ||o.attr2????||chr( 13 )||chr( 10 )||
? 'Sement?type???:' ||o. type ?????||chr( 13 )||chr( 10 )||
? 'partition?name:' ||o.attr3????||chr( 13 )||chr( 10 )||
? 'Message???????:' ||f.message??||chr( 13 )||chr( 10 )||
? 'More?info?????:' ||f.more_info?TASK_ADVICE
? from ?dba_advisor_findings?f,dba_advisor_objects?o
where ?o.task_id = f.task_id
?? and ?o.object_id = f.object_id
?? and ?f.task_name? = ? 'advisor_test?tab?Advice'
order ? by ?f.task_name;
( 2 )?
通過(guò)查詢 TABLE (dbms_space.asa_recommendations(all_runs = > 'TRUE' ,show_manual = > 'TRUE' ,show_findings = > 'FALSE' ))來(lái)查看建議;
第一個(gè)參數(shù) true 表示執(zhí)行歷次執(zhí)行結(jié)果, false 表示近期一次的結(jié)果
第二個(gè)參數(shù) true 表示返回手工執(zhí)行段顧問的結(jié)果, false 表示返回自己主動(dòng)執(zhí)行段顧問的結(jié)果
第三個(gè)參數(shù) true 表示僅顯示分析結(jié)果, false 表示顯示分析結(jié)果和分析建議
備注:案例中使用( 1 )語(yǔ)句來(lái)查看分析結(jié)果

七、 案例1(表對(duì)象級(jí)別執(zhí)行)
SQL > ? create ? table ?advisor_test? as ? select ? * ? from ?dba_objects;
Table ?created
SQL > ? insert ? into ?advisor_test? select ? * ? from ?advisor_test;
72525 ? rows ?inserted
SQL > ? /
145050 ? rows ?inserted
SQL > ? /
290100 ? rows ?inserted
SQL > ? commit ;
Commit ?complete
SQL > ? delete ?advisor_test? where ?rownum < 100000 ;
99999 ? rows ?deleted
SQL > ? /
99999 ? rows ?deleted
SQL > ? commit ;
Commit ?complete

declare
??my_task_id? number ;
??obj_id? number ;
??my_task_name?varchar2( 100 );
??my_task_desc?varchar2( 500 );
begin
??my_task_name?: = 'advisor_test?tab?Advice' ;
??my_task_desc?: = 'Manual?Segment?Advisor?Run' ;
- - - - - step? 1
??dbms_advisor.create_task(
??advisor_name? = > ? 'Segment?Advisor' ,
??task_id? = > ?my_task_id,
??task_name? = > ?my_task_name,
??task_desc? = > my_task_desc);
- - - - - step? 2
??dbms_advisor.create_object(
??task_name = > my_task_name,
??object_type = > 'TABLE' ,
??attr1 = > 'DBMON' ,
??attr2? = > ? 'ADVISOR_TEST' ,
??attr3? = > ? NULL ,
??attr4 = > null ,
??attr5 = > null ,
??object_id = > obj_id);
- - - - - step? 3
??dbms_advisor.set_task_parameter(
??task_name? = > ?my_task_name,
?? parameter = > 'recommend_all' ,
?? value = > 'TRUE' );
- - - - - step? 4
??dbms_advisor.execute_task(my_task_name);
end ;
/
已運(yùn)行



SQL > ? select
?? 2 ?? ? / * ? "|chr(13)||chr(10)" 為windows平臺(tái)的換行符,假設(shè)是linux等其他平臺(tái),請(qǐng)用 "chr(10)" 取代? * /
?? 3 ??? 'Task name ? ? :' ||f.task_name||chr( 13 )||chr( 10 )||
?? 4 ??? 'Segment name ?:' ||o.attr2 ? ?||chr( 13 )||chr( 10 )||
?? 5 ??? 'Sement type ? :' ||o. type ?? ? ||chr( 13 )||chr( 10 )||
?? 6 ??? 'partition name:' ||o.attr3 ? ?||chr( 13 )||chr( 10 )||
?? 7 ??? 'Message ? ? ? :' ||f.message ?||chr( 13 )||chr( 10 )||
?? 8 ??? 'More info ? ? :' ||f.more_info TASK_ADVICE
?? 9 ??? from ?dba_advisor_findings f,dba_advisor_objects o
? 10 ?? where ?o.task_id = f.task_id
? 11 ?? ? and ?o.object_id = f.object_id
? 12 ?? ? and ?f.task_name? = ? 'advisor_test tab Advice'
? 13 ?? order ? by ?f.task_name;

TASK_ADVICE
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Task? name ?? ? :advisor_test tab Advice
Segment? name ??:ADVISOR_TEST
Sement? type ?? : TABLE
partition? name :
Message ? ? ? :啟用表 DBMON.ADVISOR_TEST 的行移動(dòng)并運(yùn)行收縮, 預(yù)計(jì)能夠節(jié)省? 285435
31 ?字節(jié)。
More ?info ? ? :分配空間: 75497472 : 已用空間: 46953941 : 可回收空間: 28543531 :

八、案例2(表空間級(jí)別執(zhí)行)
declare
??my_task_id? number ;
??obj_id? number ;
??my_task_name?varchar2( 100 );
??my_task_desc?varchar2( 500 );
begin
??my_task_name?: = 'Tablespace Advice' ;
??my_task_desc?: = 'Manual?Segment?Advisor?Run' ;
- - - - - step? 1
??dbms_advisor.create_task(
??advisor_name? = > ? 'Segment?Advisor' ,
??task_id? = > ?my_task_id,
??task_name? = > ?my_task_name,
??task_desc? = > my_task_desc);
- - - - - step? 2
??dbms_advisor.create_object(
??task_name = > my_task_name,
??object_type = > 'TABLESPACE' ,
??attr1 = > 'USERS' ,
??attr2? = > ? null ,
??attr3? = > ? NULL ,
??attr4 = > null ,
??attr5 = > null ,
??object_id = > obj_id);
- - - - - step? 3
??dbms_advisor.set_task_parameter(
??task_name? = > ?my_task_name,
?? parameter = > 'recommend_all' ,
?? value = > 'TRUE' );
- - - - - step? 4
??dbms_advisor.execute_task(my_task_name);
end ;
/



SQL > ? select
?? 2 ?? ? / * ? "|chr(13)||chr(10)" 為windows平臺(tái)的換行符,假設(shè)是linux等其他平臺(tái),請(qǐng)用 "chr(10)" 取代? * /
?? 3 ??? 'Task name ? ? :' ||f.task_name||chr( 13 )||chr( 10 )||
?? 4 ??? 'Segment name ?:' ||o.attr2 ? ?||chr( 13 )||chr( 10 )||
?? 5 ??? 'Sement type ? :' ||o. type ?? ? ||chr( 13 )||chr( 10 )||
?? 6 ??? 'partition name:' ||o.attr3 ? ?||chr( 13 )||chr( 10 )||
?? 7 ??? 'Message ? ? ? :' ||f.message ?||chr( 13 )||chr( 10 )||
?? 8 ??? 'More info ? ? :' ||f.more_info TASK_ADVICE
?? 9 ??? from ?dba_advisor_findings f,dba_advisor_objects o
? 10 ?? where ?o.task_id = f.task_id
? 11 ?? ? and ?o.object_id = f.object_id
? 12 ?? ? and ?f.task_name? = ? 'Tablespace Advice'
? 13 ?? order ? by ?f.task_name;

TASK_ADVICE
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Task? name ?? ? :Tablespace Advice
Segment? name ??:T_SCEGAOKAOQUERY_GZ
Sement? type ?? : TABLE
partition? name :
Message ? ? ? :此對(duì)象中的空暇空間小于? 10MB
More ?info ? ? :分配空間: 65536 : 已用空間: 8192 : 可回收空間: 57344 :

Task? name ?? ? :Tablespace Advice
Segment? name ??:T_SCEGAOKAOQUERY_GZ
Sement? type ?? : TABLE
partition? name :

TASK_ADVICE
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Message ? ? ? :此對(duì)象中的空暇空間小于? 10MB 。
More ?info ? ? :分配空間: 3145728 : 已用空間: 2871921 : 可回收空間: 273807 :

Task? name ?? ? :Tablespace Advice
Segment? name ??:T_SCEGAOKAOQUERY
Sement? type ?? : TABLE
partition? name :
Message ? ? ? :此對(duì)象中的空暇空間小于? 10MB 。
More ?info ? ? :分配空間: 46137344 : 已用空間: 44837534 : 可回收空間: 1299810 :
- - - - - - - - 為了排版,省略后面的輸出 - - - - - - - - - - - - - -

備注:最后能夠執(zhí)行delete_task來(lái)刪除任務(wù),例如以下 exec dbms_advisor.delete_task(task_name => 'Tablespace Advice');

Oracle手工生成段建議(Segment Advisor)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 大庆市| 泊头市| 醴陵市| 乌恰县| 车致| 根河市| 曲阳县| 巴马| 寿光市| 丰镇市| 华宁县| 浦城县| 晋中市| 炎陵县| 普兰县| 沙河市| 色达县| 天峻县| 光泽县| 云南省| 乌鲁木齐市| 疏附县| 耿马| 吉木乃县| 南通市| 涡阳县| 襄垣县| 浮山县| 大同市| 华池县| 泸西县| 新田县| 蕲春县| 肇州县| 龙江县| 循化| 泸西县| 建昌县| 杂多县| 大连市| 永顺县|