2017年2月14日 星期二

TABLE LOCK KILL

1.先查出要砍掉的session
select b.object_name obj_name,
       d.ctime time,
       to_char(d.lmode) l,
       to_char(d.request) r,
       a.os_user_name os_user,
       c.machine machine,
       c.program program,
       c.serial# s_serial,
       a.oracle_username ora_user,
       a.object_id obj_id,
       a.process pid,
       a.session_id s_id,
       p.spid
from v$locked_object a, all_objects b, v$session c, v$lock d,V$process p
where a.object_id=b.object_id
and c.Paddr = p.Addr
and a.session_id=c.sid
and a.session_id=d.sid
--and d.type='TX'
order by d.ctime desc, p.spid;

2.unix 砍掉該spid session
ps -ef
kill -9

2017年2月13日 星期一

[oracle]REBUILD INDEX



alter index INDEX_NAME rebuild;

dbms_stats.gather_table_stats('OWNER','TABLE_NAME',degree => 4,cascade => true);

定期更新表格的統計資料(statistics)對於Oracle成本優化器(CBO)產生的存取方式優劣有著舉足輕重的地位.
SQL> exec dbms_stats.gather_schema_stats(‘owner’);
or
SQL> exec dbms_stats.gather_table_stats(‘owner’,’table_name’);

索引(index)是另一個影響Oracle資料庫效能的關鍵因素.使用者根據SQL之選擇條件(where condition)建立適當的索引,加速表格(table)資料的存取速度.過多與不適的索引,不但對於資料的存取沒有幫助,甚至會增加更新類交易之負擔.在Oracle9i以後的版本,使用alter index monitoring usage來監控表格索引的使用,使用者根據v$object_usage視觀(view)中uesd欄位值(Yes or No),判斷與刪除冗贅不必要的索引.
SQL> ALTER INDEX index_name MONITORING USAGE;

針對異動頻繁的表格,常常在系統運作一段時間後,發現資料的存取速度突然變慢很多,發生這種現象普遍的原因為索引區塊(index blocks)中產生過多的刪除記錄(entries)所致.Oracle中analyze index validate structure指令就是用來判讀索引的使用狀況,透過index_stats視觀中leaf rows的刪除比率(del_lf_rows / lf_rows * 100 > 15%)決定是否需要重建(rebuild)索引,讓管理人員提早發現問題,預防效能不佳的情形發生.
SQL> ANALYZE INDEX index_name VALIDATE STRUCTURE。

--partition table index rebuild
Step 1:  Look-up the partition name in dba_ind_partitions.
select * from dba_ind_partitions where index_name = 'XXX'
Step 2:  specify the partition name in the index rebuild statement:
SQL> alter index idx_hist_i3 rebuild partition p3;

Index altered.

select 'alter index '||index_name||' rebuild partition '||partition_name||';' from dba_ind_partitions where index_name = 'XXX';

2017年2月9日 星期四

[轉]UE 15個小技巧

1. UEDIT查找的快捷鍵是Ctrl+F(find)或ALT-F3,替換的快捷鍵是Ctrl+R(replace),再次查找的快捷鍵是F3。

2. 一般尋找與取代功能:

※在尋找/取代內將「正規化」的√給去除,並分別在尋找/取代的框格內輸入所需的文字,執行尋找/取代即可。
※如果需要尋找Enter鍵,在尋找框中可輸入^p(注意p是小寫)來代替Enter鍵。

Symbol
Function
^^
尋找 ^ 符號
^s
巨集執行時尋找選擇的字串(反白的字串)
^c
巨集執行時尋找剪貼簿的內容
^b
尋找分頁點
^p
尋找換行(dos/windows模式)
^r
尋找換行(MAC模式)
^n
尋找換行(unix模式)
^t
尋找tab

選擇所有內文之間的游標位置和搜尋目標,按住Shift鍵,在當時的搜尋是開始尋找下一個按鈕。


3. 沒有註冊碼,如何有效使用Ultraedit呢?
很多人立即想到使用crack版,可實際追究起來,那是違法的事情。
實際上,Ultraedit並沒有把路子完全堵死。我們可以使用一些小技巧來躲掉這個問題。
修改ultraedit的快捷方式,將命令行改為:E:\uedit9\UEDIT32.EXE p:,
其中p:必須是你的機器上不存在的磁碟分割,這樣,就不會有試用時間結束的問題了。

4. 如何去掉所編輯文本中包含特定字串的行? 
這則技巧是在UltraEdit的幫助文件裡提到.CTRL+R 叫出取代(Replace)視窗,
選取"正規化";然後用尋找 %*你的字串*^p 替換成空內容即可.
(UltraEdit的正規化引擎,進階->搜尋->正規化引擎->UltraEdit樣式)
如,我現在有個文件,需要去掉所有包含 http://www.baidu.net/ 這個字串的行,
尋找 %*http://www.baidu.net/*^p 替換成空即可.
注意,^p 是 DOS 文件類型的換行.如果是 Unix 類型文件,則用 ^n.

5. 如何在行末加入特定字元,比如逗號?
有了上面的經驗,CTRL+R 叫出取代(Replace)視窗,
選取"正規化";然後可以尋找 ^p(或者^n,如果是Unix 文件),
用 ,^p(或者,^n)進行"全部取代"即可.補充一點,如果是 MAC(Apple) 類型文件,則換行符號為 ^r .

6. 如何刪除空行?
參考上面兩個例子,查找 ^p$ 然後替換為空即可.

7. 編輯文件如何加入時間戳 ?
F7 快捷鍵即可.你試試看?


8. 為何 複製(Copy)/貼上(Paste)功能不能用了?
UltraEdit有10個剪貼簿(clipboard),分別用Ctrl+0 - Ctrl+9 切換
Ctrl+0 是Windows 的,其他則為用戶自定義的.我在使用的過程中錯調用了 CTRL+n,
結果內容就有問題了.你遇到過沒?

9. 即使是打開小文件也有遲延?
每次打開文件的時候總有幾秒鐘的耽擱.我的電腦效能可不算差.怎麼回事?
網絡印表機搞得鬼!
打開"進階"->"組態"->"編輯器"->"進階",
看看是不是選中了"讀取/還原印表機設定"?
如果是的話,去掉.

10. 刪除當前行內容 CTRL+e

11. 你按一下快捷鍵ALT+c試試,變為列編輯模式,可以一次輸入多行內容,只要你選好行範圍,編輯整齊的表格非常方便。

12. 游標位於某一行,按Ctrl+F2試試,有了標籤了,多設幾個,按住F2,它會往你設定的標籤處跳來跳去,很好玩(Alt+F2回前一個標籤)。

13. 發現沒有,有時候很多文件類型在Ultraedit裡沒有語法高亮度顯示,很麻煩不是。
不要急,從UE的網站上下一些方法的模組,找到你要的文件類型的語法文件,
將其內容追加到wordfile.txt裡頭,注意序號不要重複,一定要在1-20之間。網址是:
http://www.ultraedit.com/index.php?name ... age&pid=40

14.ctrl+b
寫程式的時候,括號一般要一一對應的,但是如果嵌套太多,看花眼了,怎麼辦?
你把游標放在括號開始的地方,按ctrl+b,UE 會幫你找到相對應的括號結尾的地方。
你還可以試試連著多按幾次ctrl+b。

15.自定義快捷鍵
UE很多功能都有快捷鍵,但不是所有的都有。
UE 11.00有一個Text2html的功能。我工作中遇到了要對大量源始碼進行這種操作的情況。
我就想自己定一個快捷鍵。advanced(進階)/configuration(組態)/key mapping(快速鍵)
在commands(指令)裡面找到你要用的command.
我這裡是HTMLConvertSpecialChars(HTML-轉換特殊字符),然後點 Press new key(新鍵)下面的輸入框,
設置一個自己覺得爽,不衝突的快捷鍵。比如ctrl+alt+s.然後點ok.這樣用常用的功能,可以成倍提高效率。

2017年2月7日 星期二

[oracle] JOB排程 DBMS_JOB

/*
--在oracle中設定排程執行procedure
--參數說明--參數1:為out參數,可由此jobno查詢狀態(註1)/參數2:要執行的procedure名稱/參數3:下次要執行的時間/參數4:要執行的間隔(只要執行一次傳NULL即可)
/*
下面是常有的設置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
*/
/*
DBMS_JOB.SUBMIT(
   job       OUT    BINARY_INTEGER,
   what      IN     VARCHAR2, NEXT_DATE IN DATE DEFAULTSYSDATE,
   interval  IN     VARCHAR2 DEFAULT 'NULL',
   no_parse  IN     BOOLEAN DEFAULT FALSE,
   instance  IN     BINARY_INTEGER DEFAULT ANY_INSTANCE,
   force     IN     BOOLEAN DEFAULT FALSE);
*/
/*
查看執行狀況
select * from user_jobs;
broken=y為任務停止, n為任務啟動成功
*/
--建立程序
declare
  jobno    number;
begin
  dbms_job.submit(jobno, 'sp_ins_stk05_0809;',  sysdate, '');
  dbms_output.put_line(jobno);
  commit;
end;
/
declare
  jobno    number;
begin
  dbms_job.submit(jobno, 'SP_NA_DAILY_STORE_STINE_TRP031(''20161021'',''20161031'');',  sysdate + 660/1440, '');
  dbms_output.put_line(jobno);
  commit;
end;
/
--每天固定時間啟動範例
declare
  jobno    number;
begin
  dbms_job.submit(jobno, 'Gt_Invoice_f_bk(''20161231'');',  sysdate, 'trunc(sysdate+1)+6/24');
  dbms_output.put_line(jobno);
  commit;
end;
/
--移除程序

begin
dbms_job.remove(141);
end;
/

--暫停程序
begin
  dbms_job.broken([jobs: 程序#], [broken: true/false], [next_date: 下次一執行日期時間]);
end;
/
--next_date未指定時, 預設為目前的日期時間

--恢復程序
begin
  dbms_job.broken(158, false, sysdate);
end;
/
*/