2014年1月21日 星期二

[Oracle]查詢正在執行的JOB及砍掉執行中的Session

1.先確認一下JOB的資訊
select * from dba_jobs;

2.確認正在執行的JOB資訊
select * from dba_jobs_running;

3.停止JOB
exec dbms_job.broken('&JOB',true);

4.當JOB還是繼續跑的時候,刪除還在執行的Session
select SID,SERIAL# from V$Session where SID='&SID';

alter system kill session '&SID, &SERIAL';

5.刪除JOB(需要sysdba權限)
delete from dba_jobs where JOB='&JOB';

PS:&JOB、&SID、&SERIAL,表示select出來的欄位值

[Oracle]Check DB LOCK

最簡單是這個
select * from v$locked_object ;

以下的語法可以依型別差看,不過有點難看不懂
SELECT S.SID SESSION_ID, S.USERNAME, 
DECODE(LMODE, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(LMODE)) MODE_HELD, 
DECODE(REQUEST, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(REQUEST)) MODE_REQUESTED,
O.OBJECT_NAME,O.OBJECT_TYPE, 
S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2 
FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S 
WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID ;

用此語法配合提示可告訴User目前被誰Hold住,暫時不建議操作
SELECT osuser,machine,sql_text FROM v$open_cursor a, v$session s 
WHERE  s.sid=a.sid and a.sql_text LIKE '%語法%'

[Oracle]DBMS_JOB

一.
SELECT * FROM ALL_JOBS
可以找到JOB的ID

不管JOB有沒有Broken 都可以用以下語法重跑

Syntax

DBMS_JOB.RUN ( 
   job       IN  BINARY_INTEGER,
   force     IN  BOOLEAN DEFAULT FALSE);

EXAMPLE:
EXECUTE DBMS_JOB.RUN(14144);

二.
要建立一個New Job的時候

Syntax

DBMS_JOB.SUBMIT ( 
   job       OUT BINARY_INTEGER,
   what      IN  VARCHAR2,
   next_date IN  DATE DEFAULT sysdate,
   interval  IN  VARCHAR2 DEFAULT 'null',
   no_parse  IN  BOOLEAN DEFAULT FALSE,
   instance  IN  BINARY_INTEGER DEFAULT any_instance,
   force     IN  BOOLEAN DEFAULT FALSE);

Example

This submits a new job to the job queue. The job calls the procedure DBMS_DDL.ANALYZE_OBJECT to generate optimizer statistics for the table DQUON.ACCOUNTS. The statistics are based on a sample of half the rows of theACCOUNTS table. The job is run every 24 hours:
VARIABLE jobno number;
BEGIN
   DBMS_JOB.SUBMIT(:jobno, 
      'dbms_ddl.analyze_object(''TABLE'',
      ''DQUON'', ''ACCOUNTS'', 
      ''ESTIMATE'', NULL, 50);' 
      SYSDATE, 'SYSDATE + 1');
   commit;
END;
/
Statement processed.
print jobno
JOBNO
----------
14144

    下面是常有的設置Interval的方法:
    每天固定時間運行,比如早上8:10分鐘:Trunc(Sysdate+1) + 8/24

    每天:trunc(sysdate+1)
    每週:trunc(sysdate+7)
    每月:trunc(sysdate+30)
    每個星期日:next_day(trunc(sysdate),'SUNDAY')  
    每天6點:trunc(sysdate+1)+6/24    
    每半個小時:sysdate+30/1440

三.
異常處理

JOB不能運行情況處理

1.先來瞭解一下JOB的參數說明:與job相關的參數一個是job_queue_processes,這個是運行JOB時候所起的進程數,
    當然系統裡面 JOB大於這個數值後,就會有排隊等候的,最小值是0,表示不運行JOB,
    最大值是36,在OS上對應的進程時SNPn,9i以後OS上管理JOB的進程叫CJQn.可以使用下面這個SQL確定目前有幾個SNP/CJQ在運行。

select * from v$bgprocess,這個paddr不為空的snp/cjq進程就是目前空閒的進程,有的表示正在工作的進程。

另外一個是job_queue_interval,範圍在1——3600之間,單位是秒,這個是喚醒JOB的process,因為每次snp運行完他就休息了,
    需要定期喚醒他,這個值不能太小,太小會影響數據庫的性能。

2.診斷:先確定上面這兩個參數設置是否正確,特別是第一個參數,設置為0了,所有JOB就不會跑,確認無誤後,我們繼續向下。

3.使用下面的SQL察看JOB的的broken,last_date和next_date,last_date是指最近一次job運行成功的結束時間,
    next_date是根據設置的頻率計算的下次執行時間,根據這個信息就可以判斷JOB上次是否正常,還可以判斷下次的時間對不對,SQL如下:

select * from dba_jobs

有時候我們發現他的next_date是4000年1月1日,說明job要不就是在running,要不就是狀態是break(broken=Y),
    如果發現JOB的broken值為Y,找用戶瞭解一下,確定該JOB是否可以broken,如果不能broken,那就把broken值修改成N,
    修改再使用上面的SQL察看就發現他的last_date已經變了,JOB即可正常運行,修改broken狀態的SQL如下:

declare
    BEGIN  
        DBMS_JOB.BROKEN(<JOB_ID>,FALSE);
    END;

4.使用下面的SQL查詢是否JOB還在Running

select * from dba_jobs_running

如果發現JOB已經Run了很久了還沒有結束,就要查原因了。一般的JOB running時會鎖定相關的相關的資源,
    可以查看一下 v$access 和 v$locked_object 這兩個view,如果發現其他進程鎖定了與 JOB相關的Object,
    包括PKG/Function/Procedure/Table等資源,那麼就要把其他進程刪除,有必要的話,把JOB的進程也刪除,再重新跑看看結果。

5.如果上面都正常,但是JOB還不run,怎麼辦?那我們要考慮把JOB進程重啟一次,防止是SNP進程死了造成JOB不跑,指令如下:

alter system set job_queue_processes=0 ——關閉job進程,等待5——10秒鐘

alter system set job_quene_processes=5 ——恢復原來的值      

2013年12月29日 星期日

[Oracle]REFRESH SNAPSHOT

當您發現您的 snapshot 沒有及時更新資料的時候,可以透過以下的指令,立刻幫您更新,達到現階段的資料同步!

EXEC DBMS_SNAPSHOT.REFRESH('SNAPSHOT_NAME');

參數比較多可以設定的語法是

BEGIN
  DBMS_SNAPSHOT.REFRESH(
    LIST                 => 'MANAGER_WNC.SC_ALL'
   ,PUSH_DEFERRED_RPC    => TRUE
   ,REFRESH_AFTER_ERRORS => FALSE
   ,PURGE_OPTION         => 1
   ,PARALLELISM          => 0
   ,ATOMIC_REFRESH       => TRUE
   ,NESTED               => FALSE);
END;

有遇過這樣的問題
ORA-00942: table or view does not exist
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2251
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2457
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2426
ORA-06512: at line 2
00942. 00000 -  "table or view does not exist"
網路上的解答是 不過還沒成功破解 ><
That is a common case of view, depending on some other tables or views (which might depend on other data), having broken dependencies. In this particular case the view depended on other view which depended on a table which was missing a column.

In this case, you do not know which of the tables within the materialized view is throwing the ORA-00942 error.  This user was advised to enable SQL Trace (TKPROF) st the session level to determine the exact table that is seeing the ORA-00942 error.

2013年12月26日 星期四

2013我心中的體壇五大經典時刻

1.現場觀看新加坡F1的比賽,雖然視點比不上乖乖在家看轉播,但是引擎聲音的震撼,現場觀眾的氣氛,與上千觀眾一起奔跑在F1的跑道上,熱力四射的Big Bang,The Killers,蕾哈娜,湯姆瓊斯,鮑勃吉爾道夫,頒獎台上的維特爾,阿隆索跟冰人,絕對是筆墨難以形容的感動
2.NBA總冠軍,熱火達成二連霸,身為熱火球迷的我,看到熱火禁區差點被溜馬打爆,又被Danny Green的三分雨下到差點淹死,心臟快要跳了出來,Ray Allen跟Mike Miller的老將價值完美呈現才成就了二連霸的美夢,三連霸~~gogogo
3.MLB總冠軍,波士頓紅襪隊,波士頓馬拉松爆炸案與這次紅襪的奪冠關聯性有多少,難以預測,但是抱著Heal The City的Boston Strong們絕對值得讓球迷感動,老爹跟飛翔夏威夷人的滿貫砲,讓更是完全牽動著球迷,知道他想做什麼,卻還是讓他做到了,這就是運動的迷人之處
4.李維拉的退休絕對是美國職棒的損失,有時候我在想,如果他沒有受傷的話,應該會想要挑戰生涯700次救援成功吧,就有可能多打一年,然後我就有機會親臨洋基隊球場看他投球,不過命運弄人,再見了,最後的42號球衣,永遠的救援王,一顆卡特走天下又準到不行
5.Andy Murry奪得溫布頓男單獎盃,去年沒有達成的,今年再接再厲,雖然最後證明今年還是小丑球王跟蠻牛的天下,不過有這一冠夠了,也證明了情緒的穩定絕對可以影響運動員的表現

[電影觀感]如果 愛 Perhaps Love

導演:陳可辛 演員:金城武 周迅 張學友 池珍熙
2006年金馬獎最佳導演 最佳女演員



看完這部片第一個感想就是,金城武永遠都不會變成張學友,張學友永遠也不會是金城武

舞台劇雪狼湖是張學友的心血結晶,身為男主角的他在這部片只能屈居第二男主角,
但是以歌聲來說,他的演出相較他人是唯一能感動影迷的,高音低音都能夠完美呈現
華人世界相較歐美來說,可說沒有堪稱經典的歌舞片作品(印度寶萊塢的除外),陳可辛想要嘗試,卻還是不敢大膽地踏出去,只能劇中劇的方式來呈現,而且就算是劇中劇了,對觀眾來說還是突兀到不行,無論是一開場的群舞或是中段劇團演員的合唱均是如此,只有周迅跟金城武的主題曲跟張學友的獨白能夠完美的融合於劇情之中並推升觀眾的情感

不管張學友唱的再好,帥哥的角色還是輪不到他,倒是臉上的疤痕不假掩飾的結果,讓人有"這個人一定是個大反派"的感覺,甚至還以為後段可能會在道具做個什麼手腳把男女主角弄死的感覺,周迅在本片的演出實在出色,獲得金馬獎影后時在當之無愧,比起陳可辛甜甜密中的張曼玉雖然還是有點差距,也算是相當值得讚許的了

金城武的角色是個設定的相當好的角色,如果不是金城武先生來演的話,其他演員是有機會入圍影帝的,對他而言也算是很棒的突破了,當然水中那幾場戲是有點多餘,且去完北京之後角色就完全被弱化,算是有點不利

劇中劇+蒙太奇+歌舞場景+池珍熙的引導角色,形式玩的那麼兇,觀眾的情感其實不容易投入,雖然陳可辛奪得金馬獎最佳導演,最佳影片卻輸給了平凡真摯的"父子"一片,再接再厲吧,我可不希望華人世界的歌舞片只有"如果 愛"跟"天台"

2013年12月25日 星期三

[電影觀感]看見台灣 Beyond Beauty

導演:齊柏林 監製:侯孝賢 旁白:吳念真 音樂:何國杰



在台灣掀起熱潮的一部電影,雖然票房可能沒有超過偏喜劇風格的大尾鱸鰻跟總鋪師,也可能無法回收九千萬的成本,但能以這種方式讓台灣人看到這片土地的美麗與哀愁,並轉化為行動,就是最大的貢獻。

今年桃園電影節(首屆)的開幕片,我因為時間無法配合而錯過(聽名字還以為導演是外國人)
今年金馬影展播放時,我猶豫不決,決定要買票時竟已售完
院線上了很久,決定不能等下檔時徒呼負負,決定跑去統領戲院好好觀賞此片

影片中有些觀點我到沒想過,每隔約七公里一個的水泥漁港,大大破壞海洋景觀及生態;雖然去清境沒住城堡民宿,但我也成為破壞環境的幫兇;看到水量不多的萬大水庫,只想到最近雨量較少,沒想到是山上土石崩落造成水庫70%的淤積。以前覺得日本人很過份,花錢買別人的木材不砍自己的樹,沒想到台灣商人竟然挖去美麗的山頭,製成水泥外銷出去;雖然討厭當抓耙子,但是希望大家都可願意挺身揪出環境破壞者!

雖然說九二一大地震破壞了整個台灣的地質,極端氣候帶來的狂風暴雨也非我們能夠控制的,殺頭的生意有人做,賠本的生意沒人做,無良的盜採砂石業者,偷排廢水的黑心廠商只要有利可圖,絕對不會消失在這個世上,只要沒利可圖(黑心錢的賺頭小於被抓到的風險),加上政府單位的強力把關(這個真的很重要,有時候覺得自己養了一些沒有用的公務員),有些是已經來不及(水泥海岸很難恢復原貌,桃園沿岸的藻礁也是),但是也還有很多是我們可以做的,大家加油,台灣加油!!