2017年10月20日 星期五

[SQL Server]update join table

https://stackoverflow.com/questions/1293330/how-can-i-do-an-update-statement-with-join-in-sql

SQL Server:
update u
set u.assid = s.assid
from ud u
    inner join sale s on
        u.id = s.udid
Oracle:
update
    (select
        u.assid as new_assid,
        s.assid as old_assid
    from ud u
        inner join sale s on
            u.id = s.udid) up
set up.new_assid = up.old_assid

2017年9月30日 星期六

SVN小烏龜圖示消失


參考來源:http://hsieheric.blogspot.tw/2014/12/tortoisesvn-tortoisegit-icon.html


1.使用執行輸入regedit

2.路徑
HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows >CurrentVersion >Explorer > ShellIconOverlayIdentifiers

3.修改名稱改變順序

4.重啟資料夾

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;
/
*/

2016年12月12日 星期一

[ORACLE]導出入工具exp/imp/expdp/impdp(未整理)

相關使用參數
dmp導出語法:(加條件參數query=\"WHERE send_date between TO_DATE\(\'20151201\',\'yyyymmdd\'\) AND TO_DATE\(\'20151202\',\'yyyymmdd\'\)\")
expdp account/pwd tables=MA_STORE_M_F directory=AP_EXP_DIR dumpfile=TORE_M_F_1224.dmp logfile=STORE_M_F_1224.log
dmp導入語法:(TABLE_EXISTS_ACTION參數可下APEND或TRUNCATE)
impdp account/pwd tables=STORE_M_F directory=DATA_PUMP_DIR dumpfile=STORE_M_F_1224.dmp CONTENT=DATA_ONLY TABLE_EXISTS_ACTION=APEND


來源-http://fecbob.pixnet.net/blog/post/38083113-oracle-%E8%B3%87%E6%96%99%E5%BA%AB%E5%8C%AF%E5%87%BA(exp)--%E5%B0%8E%E5%85%A5(imp)
exp
將資料庫內的各物件以二進位方式下載成dmp 檔,方便資料移轉。
buffer :下載資料緩衝區,以位元組為單位,缺省依賴作業系統
consistent :下載期間所涉及的資料保持read only,缺省為n
direct :使用直通方式,缺省為n
feeback :顯示處理記錄條數,缺省為0,即不顯示
file:輸出檔案,缺省為expdat.dmp
filesize:輸出檔案大小,缺省為作業系統最大值
indexes:是否下載索引,缺省為n,這是指索引的定義而非資料,exp 不下載索引資料
log:log 檔,缺省為無,在標準輸出顯示
owner:指明下載的使用者名
query:選擇記錄的一個子集
rows:是否下載表記錄
tables:輸出的表名清單
匯出整個實例
exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y
user 應具有dba 許可權
匯出某個使用者所有物件
exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000
匯出一張或幾張表
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000
feedback=10000
匯出某張表的部分資料
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000
query=\」where col1=\’...\’ and col2 \<...\」
不可用於巢狀表格
以多個固定大小檔方式匯出某張表
exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,... filesize=1000m tables=emp buffer=4096000
feedback=10000
這種做法通常用在:表資料量較大,單個dump 檔可能會超出檔案系統的限制
直通路徑方式
direct=y,取代buffer 選項,query 選項不可用
有利於提高下載速度
consistent 選項
自export 啟動後,consistent=y 凍結來自其它會話的對export 操作的資料物件的更新,這樣可以保證
dump 結果的一致性。但這個過程不能太長,以免回滾段和連線日誌消耗完
imp
將exp 下載的dmp 檔上載到資料庫內。
buffer:上載資料緩衝區,以位元組為單位,缺省依賴作業系統
commit:上載資料緩衝區中的記錄上載後是否執行提交
feeback :顯示處理記錄條數,缺省為0,即不顯示
file:輸入檔,缺省為expdat.dmp
filesize:輸入檔案大小,缺省為作業系統最大值
fromuser:指明來源使用者方
ignore:是否忽略物件創建錯誤,缺省為n,在上載前物件已被建立往往是一個正常現象,所以此選項建
議設為y
indexes:是否上載索引,缺省為n,這是指索引的定義而非資料,如果上載時索引已建立,此選項即使為
n 也無效,imp 自動更新索引資料
log:log 檔,缺省為無,在標準輸出顯示
rows:是否上載表記錄
tables:輸入的表名清單
touser:指明目的使用者方
導入整個實例
imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y
feedback=10000
導入某個使用者所有物件
imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000
commit=y ignore=y feedback=10000
導入一張或幾張表
imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser
touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
以多個固定大小檔方式導入某張表
imp dbuser/oracle file=\(1.dmp,2.dmp,3.dmp,...\) filesize=1000m tables=emp fromuser=dbuser
touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000

Oracle 資料庫的備份與恢復


oracle資料庫有三種標準的備份方法,它們分別是匯出/導入(exp/imp).熱備份與冷備份.匯出備件是一種邏輯備份,冷備份與熱備份是物理備份.

利用export可將資料從資料庫中提取出來,利用import則可將提取出來的資料送回到oracle資料庫中去.
一. 匯出/導入(export/import)
oracle支援三種方式類型的輸出:
1. 簡單匯出資料(export)與導入資料(import)

(1).表方式(t方式),將指定表的資料匯出.
(2).使用者方式(u方式),將指定使用者的所有物件及資料匯出.

(3).全庫方式(full方式),瘵資料庫中的所有物件匯出.


資料導入(import)的過程是資料匯出(export)的逆過程,分別將資料檔案導入資料庫與將資料庫資料匯出到資料檔案.

2. 增量匯出/導入

增量匯出是一種常用的資料備份方法,它只能對整個資料庫來實施,並且必須作為system來匯出.在進行此種匯出時,系統不要求回答任何問題.匯出檔案名缺省為export.dmp,如果不希望自己的輸出檔案定名為export.dmp,必須在命令列中指出要用的檔案名.

增量匯出包括三種類型:

(1).“完全」增量匯出(complete)exp system/manager inctype=complete file=040731.dmp
即備份三個資料庫,比如:

備份上一次備份後改變的資料,比如:

(2).“增量型」增量匯出

exp system/manager inctype=incremental file=040731.dmp

(3).“累積型」增量匯出

累計型匯出方式是匯出自上次「完全」匯出之後資料庫中變化了的資訊.比如:

exp system/manager inctype=cumulative file=040731.dmp

資料庫管理員可以排定一個備份時間表,用資料匯出的三個不同方式合理高效的完成.

比如資料庫的被封任務可以做如下安排:


星期一:完全備份(a)
星期二:增量匯出(b)

星期三:增量匯出(c)

星期四:增量匯出(d)

星期五:累計匯出(e)

星期六:增量匯出(f)

星期日:增量匯出(g)