Oracle Drop Partition & MView Rsync & Index確認

Drop Partition & MView Rsync & Index確認

標籤: 

步驟:
一、確認要刪的Table Partition是否為Mview rsync資料 
二、確認db大小,可以知道刪除多少資料 
三、Report Mview jobs stop 
四、Drop Partition(MES & Report) 
五、使用Complete更新Mview物件 
六、啟用Mview job 
七、確認index狀態 
八、確認刪除的大小 

0.架構說明: 
Oracle DB:10.2.0.4 
資料來源:MESDB 
Mview 抓取資料ServerReportDB 

1.確認Table Partition是否為Mview rsync Data 

MESDB Partition(dba_mview_logs): 
select * from dba_mview_logs where master in ('FWAMTCOMPTRACKHISTORY','FWEQPSUBEQPHISTORY','FWEXTDATALINKCOMPDATAHISTORY','FWEXTDATALINKHISTORY','FWMHSTRANSFERCOMMAND'); 

 

2.確認資料量大小(dba_segments) 
select SUM(BYTES/1024/1024/1024) from dba_segments where owner='C5PROD' AND SEGMENT_NAME='FWEQPSUBEQPHISTORY'; 
3.4G資料 
 

3.Stop MView job,一定要用user的帳號進入(dba_jobs) 
Report DB: 

select 'exec dbms_job.broken(' || job || ',true);' 
from dba_jobs where Log_user = 'STGC5' 
'EXECDBMS_JOB.BROKEN('||JOB||',TRUE);' 

exec dbms_job.broken(59,true); 
exec dbms_job.broken(60,true); 
… 

停掉之後,還需要去確認是否有停掉。 
關閉之後,job會劃×,如job 83,Broken會顯示yes,Running顯示no 
 
當天在做的時候,job的broken是yes,runing顯示yes,一直關不掉,只好刪掉之後再重建了。 
若是整台主機DB都可以停止,可以把job_queue_processes設為0,這樣背景執行的job就不會再跑起來了。 
先確認一下目前的job_queue_processes: 
SQL> show parameter job 

NAME                                 TYPE        VALUE 
------------------------------------ ----------- 
job_queue_processes                  integer     80 

SQL>alter system set job_queue_processes=0 scope=both; 

正在運行的Job不受影響,因為它在運行前就獲得了ora_jXXX進程。 
修改後的參數只對:修改完成之後,要執行的Job有影響,因為之後的Job在執行前要獲得Job的調度進程. 
由於我們這裏設置job_queue_processes=0,所以之後不會再有Job執行。 

確認JOB是否還有在執行 
select job from dba_jobs_running; 

4.Drop MESDB partition(DBA_TAB_PARTITIONS) 
先測試一下刪除一個Partition table 
SELECT 'alter table '||table_owner||'.'||table_name||' drop partition ' ||PARTITION_NAME||';' FROM DBA_TAB_PARTITIONS 
WHERE TABLE_OWNER='C5PROD' AND (PARTITION_NAME LIKE ('%2011%') OR 
PARTITION_NAME LIKE ('%2012Q1%') OR PARTITION_NAME LIKE ('%2012Q2%') ) AND TABLE_NAME='FWEQPSUBEQPHISTORY'; 

alter table C5PROD.FWEQPSUBEQPHISTORY drop partition ESHI_2011Q2; 
alter table C5PROD.FWEQPSUBEQPHISTORY drop partition ESHI_2011Q3; 
… 

5.使用complete更新MVIEW物件(all_mviews) 
SELECT 'exec dbms_mview.refresh(''' ||OWNER||'.'||MVIEW_NAME|| ''',''C'',atomic=>false);' from all_mviews where owner='STGC5'; 

exec dbms_mview.refresh('STGC5.FWEQPSUBEQPHISTORY','C', atomic_refresh =>false); 
exec dbms_mview.refresh('STGC5.FWAMTCOMPTRACKHISTORY','C', atomic_refresh =>false); 
exec dbms_mview.refresh('STGC5.FWEXTDATALINKCOMPDATAHISTORY','C', atomic_refresh =>false); 
exec dbms_mview.refresh('STGC5.FWEXTDATALINKHISTORY','C', atomic_refresh =>false); 
exec dbms_mview.refresh('STGC5.FWMHSTRANSFERCOMMAND','C', atomic_refresh =>false); 

6. 啟用MVIEW JOB(dba_jobs),確認一下Report AP 
select 'exec dbms_job.broken(' || job || ',false);' 
from dba_jobs where Log_user = 'STGC5' 
'EXECDBMS_JOB.BROKEN('||JOB||',FALSE);' 

exec dbms_job.broken(59,false); 
exec dbms_job.broken(60,false); 
… 

若是整台主機DB都可以停止,可以把job_queue_processes設為0,這樣背景執行的job就不會再跑起來了。 
SQL>alter system set job_queue_processes=80 scope=both; 

7.確認index狀態(dba_part_indexes): 
select owner,index_name,table_name,partitioning_type,locality from dba_part_indexes where owner='C5PROD'; 
若是local index,刪除partition table會一併刪除index,若是global index,需要做rebuild(查看locality這一個欄位) 

確認index是否失效(dba_indexes): 
SELECT owner,index_name,index_type,table_owner,table_name,table_type,tablespace_name,status,global_stats,join_index FROM DBA_INDEXES  WHERE OWNER='C5PROD' AND( STATUS ='INVALID' OR STATUS='UNUSABLE'); 

Status:invalid or unusable代表的是index失效 
Status:n/a,代表的是Partition index 

若是Partition index,需要從user_ind_partitionsrebuild: 

select 'alter index ' ||index_name||' rebuild partition '|| partition_name||' tablespace '|| tablespace_name||';' from user_ind_partitions                      where status = upper('UNUSABLE') 

alter index IDX_GROUP_HIST_7F1A rebuild partition GROUP_HIST_7F1A_Q3 tablespace STGC5_TRG_IDX; 

若是table index,直接做rebuild動作即可(可以從user_indexes來串SQL) 
select index_name,index_type,tablespace_name,table_type,status 
from user_indexes 
where status='UNUSABLE' 

alter index PKFWEXTDATALINKHISTORY rebuild; 

八、最後再統計一下Purge大小(dba_segments) 
花最久的時間是Mview refresh的時間,40.58G花了2個多小時。 
select SUM(BYTES/1024/1024/1024) from dba_segments where owner='C5PROD' AND SEGMENT_NAME='FWEQPSUBEQPHISTORY'; 

Read more

How to document Home Lab and Network

運維機房和跨域的網路,會遇到各式需求與問題,用對工具才能分析問題,個人覺得最重要的是使用能處理問題的工具。 推薦目前想學和正在使用的平台與軟體,協助將公司/家用機房文件化 佈告欄任務管理 Focalboard 白板可管理任務指派 網路架構文件編寫 netbox 精細管理網路設備與連接線路 IP 資源管理 phpipam 專注網路IP分配 邏輯塊文件編寫 draw.io 視覺化概念圖 機房設備管理 ITDB 管理設備生命週期與使用者

By Phillips Hsieh

如何在Raspberry Pi4上安裝Proxmox for ARM64

第一步 準備好Raspberry Pi 4 / CM4 4GB RAM,這裡要留意CM4如果是買有內建eMMC storage會限制不能使用SD卡開機而限制本地空間容量,如果沒有NAS外接空間或使用USB開機的話,建議買CM4 Lite插上大容量SD卡 第二步 去Armbian官網下載最小化Debian bookworm image https://www.armbian.com/rpi4b/ Armbian 25.2.2 Bookworm Minimal / IOT 然後寫入SD/USB開機碟,寫入方法參考官方文件 https://github.com/raspberrypi/usbboot/blob/master/Readme.md Note: 官方提供的預先設定系統方法,可以在Armbian初次啟動自動化完成系統設定。連結在此 https://docs.armbian.com/User-Guide_Autoconfig/

By Phillips Hsieh

世界越快心越慢

在晚飯後的休息時間,我特別享受在客廳瀏灠youtube上各樣各式創作者的影音作品。很大不同於傳統媒體,節目多是針對大多數族群喜好挑選的,在youtube上我會依心情看無腦的動畫、一些旅拍記錄、新聞時事談論。 尤其在看了大量的Youtube的分享後,我真的感受到會限制我的是我的無知,特別是那些我想都沒想過的實際應用,在學習後大大幫助到我的生活和工作層面。 休息在家時,我喜歡想一些沒做過的菜,動手去設計生活和工作上的解決方案,自己是真的很難閒著沒事做。 如創作文章,陪養新的習慣都能感覺到成長的喜悅,是不同於吃喝玩樂的快樂的。 創作不去限制固定的形式,文字是創作、影像聲音也是創作,記錄生活也是創作,我想留下的就是創造—》實現—》回憶,這樣子的循環過程,在留下的足跡面看到自己一路上的成長、失敗、絕望、重新再來。 雖然大部份的時候去做這些創作也不明白有什麼特別的意義,但不去做也不會留下什麼,所以呀不如反事都去試試看,也許能有不一樣的水花也許有意想不到的結果,投資自己永遠不會是失敗的決定,不是嗎?先問問自己再開始計畫下一步,未來沒人說得準。 像最近看youtube仍大一群人在為DOS開

By Phillips Hsieh

知識管理的三個步驟:一小時學會把知識運用到生活上

摘錄瓦基「閱讀前哨站」文章作為自己學習知識管理的內容 Part1「篩選資訊」 如何從海量資訊中篩選出啟發性、實用性和相關性的精華,讓你在學習過程中不再迷失方向。 1. 實用性 2. 啟發性 Part2「提高理解」 如何通過譬喻法和應用法,將抽象的知識與日常生活和工作緊密結合,建立更深刻的理解。 1. 應用法 2. 譬喻法 Part3「運用知識」 如何連結既有知識,跟自己感興趣的領域和專案產生關聯,讓你在運用知識的路途上游刃有餘。 1. 跟日常工作專案、人際活動產生連結 # 為什麼要寫日記? * 寫日記是為了忘記,忘卻瑣碎事情,保持專注力 * 寫日記就像在翻譯這個世界,訓練自己的解讀能力 * 不只是透過日記來記錄生活,而是透過日記來發展生活 #如何寫日記? * 不要寫流水帳式的日記,而是寫覆盤式的日記 當我們試著記錄活動和感受之間的關聯,有助於辦認出真正快樂的事 日記的記錄方式要以過程為主,而非結果 * 感恩日記的科學建議,每日感恩的案例

By Phillips Hsieh