2008年12月31日 星期三

[Oracle] 使用rownum選擇列

Oracle在使用rownum select資料時

select rownum from orderTable where rownum between 100 and 200 ;

不會有資料出現,因為rownum 在select出結果的時候才會產生,有點像增加一個臨時的欄位,從1開始; between 100 and 200還沒有結果,所以不會出現資料!!

可以用下面的方法解決:

select * from orderTable where rownum <=200 minus (select * from orderTable where rownum <=100);

或是使用ROW_NUMBER函數

SELECT NO, NAME FROM (

SELECT NO, NAME, ROW_NUMBER() OVER (ORDER BY NO) RNUM

FROM ROWNUM_TEST ) WHERE RNUM BETWEEN 5 AND 10

2008年12月26日 星期五

如何使用獨立磁帶媒體櫃排定自動備份的時程

如何使用獨立磁帶媒體櫃排定自動備份的時程
轉貼微軟msdn  

http://support.microsoft.com/default.aspx?scid=kb;zh-tw;239892
「Windows 2000 備份」(Ntbackup.exe) 設計來與「卸除式存放裝置管理員」(RSM) 搭配使用,以便在備份時管理媒體。
這在磁帶媒體櫃中存有一些磁帶時特別好用,因為在排定的備份程式呼叫磁帶時,RSM 可以自動掛載或卸載磁帶。
如此使得不用人力介入的自動備份得以實現,因為 RSM 會依據您所選取的備份選項載入正確的磁帶,然後覆寫原先的內容或者附加到原先的內容後面。

如果您有一部獨立的磁帶媒體櫃 (需要手動載入/卸載媒體),只要欲備份的磁碟內容可以容納到一卷磁帶之內,便可以排定在夜間進行自動備份。您有兩種方法可以選擇:
• 受管理的方法
當您想管理媒體時可使用此法。此種方法可以確保磁帶在被覆寫前,磁帶機內已放入適當的磁帶。建議您使用此法。
• 不受管理的方法
此種方法只會以目前的備份工作覆寫目前位於獨立磁帶機中的磁帶。此法較易實作,但若啟動排定的備份之前磁帶機中未放入適當的磁帶,重要的資料就可能被覆寫。若您與不同的程式共用一部獨立磁帶機,則不建議您使用此法。

受管理的方法
若要使用此方法,請將磁帶標上標籤 (一週內的每個工作天各一卷),然後排定每天備份,以一週為一輪。
唯一需要的人力介入,是確保前一晚的備份磁帶已經退出,並將次一晚的磁帶插入獨立磁帶媒體櫃內。任何一個非工程背景的助理人員均可從事這項工作,只要在下次排定的備份時間之前執行此手動作業即可。
下一節簡介了準備磁帶與貼標籤的基本概念及步驟,並說明如何排定 Ntbackup 來使用磁帶。
此處的範例經過簡化,說明了在每晚 (週一至週五) 執行正常備份,每次均覆寫原先的磁帶。
或許您會想在週一至週五執行增量備份,然後在週末以另外一組磁帶執行完整備份。磁帶必須先位於 RSM 匯入、可用 (free) 或備份等媒體集區, Ntbackup 才能使用該磁帶。

匯入媒體是可被 RSM 辨識為與已安裝程式 (如 Ntbackup) 相容,但尚未分類及移至該程式的媒體集區之媒體。若 Ntbackup 在匯入媒體集區中偵測出它所認得的媒體,您會收到一個詢問是否要匯入該媒體的訊息。

此媒體匯入以後,您就可以用它來執行還原或者製作新的備份。
可用媒體是 RSM 準備給任何程式使用的媒體,其中寫入了一個「可用媒體」標籤。當您首次使用某一卷磁帶時,程式會從可用媒體集區中取出該磁帶,再將它配置到該程式的媒體集區內,以供將來的工作使用。

準備磁帶
請使用下列步驟,準備 Ntbackup 所使用的每一卷磁帶。 注意 :此作業會在每一卷磁帶上寫入一個「可用媒體」標籤。
1. 使用 [電腦管理],展開 [儲存裝置] ,展開 [卸除式媒體] ,再展開 [實體位置] 。
2. 找出磁帶裝置的登錄項並將其展開,然後按一下該磁帶裝置底下的 [媒體] 圖示。
3. 將磁帶插入磁帶機內。RSM 會讀取磁帶,此磁帶所在的媒體集區則顯示在右方窗格內 (若是全新的媒體,這通常是無法辨識的媒體集區)。
4. 在右方窗格中,在磁帶上按一下滑鼠右鍵,再按一下 [準備] 。您可以監控此作業的工作佇列以確定它是否完成,或者等待狀態變為「閒置,可用」(Idle, available),媒體集區變為「可用」。
5. 寫入可用標籤之後,請在磁帶上按一下滑鼠右鍵將其退出,再按 [退出] 。此時「媒體退出精靈」啟動,並將磁帶移至離線媒體櫃中。
6. 對於每個欲進行準備工作的磁帶,均請重複步驟 3 至 5。

記住,Ntbackup 在進行備份時只能使用準備好的磁帶。請預先計算好您的備份策略需要多少卷磁帶,並在繼續下一節之前,準備好所有的磁帶。
替磁帶加上標籤
準備好磁帶以後,請利用 Ntbackup 以可描述磁帶內容的名稱,撰寫一個 Microsoft Tape Format (MTF) 標籤。完成以後,即可替 Ntbackup 排程,藉由指定相同的媒體標籤名稱,不斷重複使用該磁帶。 請使用下列步驟,替您要 Ntbackup 重複使用的每一卷磁帶加上標籤。

注意 :此作業會在每一卷磁帶中寫入一個唯一的 MTF 標籤。請確定每一卷磁帶都有唯一的名稱,即使您每週輪流使用不同組的磁帶。
1. 確定備妥的磁帶已放入獨立磁帶媒體櫃中。
2. 啟動 Ntbackup,再按一下 [備份精靈] 。
3. 當 [備份項目] 對話方塊出現時,請按一下 [備份選取的檔案、磁碟機或網路資料] 。
4. 當 [要備份的項目] 對話方塊出現時,請按一下任何本機磁碟機上的任何單一資料夾。
5. 當 [儲存備份目的地] 對話方塊出現時,請在 [備份媒體類型] 區域中按一下磁帶機,再於 [備份媒體] 區域中按一下 [新媒體] 。
6. 當 [完成備份機靈] 對話方塊出現時,請按一下 [進階] 。
7. 繼續進行螢幕上的步驟,直到 [備份標籤] 對話方塊出現為止。
在此對話方塊中,您可以變更 [備份標籤] 和 [媒體標籤] 欄位。

[媒體標籤] 欄位中的資訊依磁帶不同而有所差異。請修改 [媒體標籤] 欄位的內容,讓它含有有意義的資訊,以代表一週內每一天的磁帶。本文中的範例使用唯一的名稱,如 Monday-Full、Tuesday-Full 等等 (一週內的每一天及每一卷磁帶都有一個唯一的名稱)。
8. 繼續執行對話方塊的內容並開始備份。如此即可備份單一資料夾,並寫入一個有意義的媒體標籤,且從現在開始您可以用它來排定備份的時程。
9. 備份程序完成之後,結束 Ntbackup。
10. 使用 RSM,您可以在備份媒體集區中看到磁帶出現。在此磁帶上按一下滑鼠右鍵,即可檢視其內容。若您按一下側邊的標籤, [識別標籤] 欄位中含有您在步驟 7 中所指定的磁帶名稱。

從現在開始,只要您排定在該日執行備份,並選擇覆寫相同的標籤名稱時,便會使用這個名稱。
11. 在磁帶上按一下滑鼠右鍵,再按一下 [退出] ,然後再於磁帶上貼上備份時所指定的標籤名稱。
12. 對每一卷磁帶重複上述步驟,直到所有磁帶都擁有有效的 MTF 媒體標籤為止。

排定週期性的每週備份
您可以使用 Ntbackup 內建的排程器排定週期性的每週備份工作。您可以選擇建立一個批次檔搭配「排程工作精靈」 或 at schedule 指令使用。
首先,您需要使用 Ntbackup 來建立備份選擇 .bks 檔, Ntbackup 使用這個檔案來偵測要備份哪一磁碟機/資料夾/檔案。
若在備份排程器之外排程,您還得利用 Ntbackup 建立備份指令行字串供批次檔使用。 若要排定週期性的每週備份:
1. 啟動 Ntbackup,再按一下 [備份精靈] 。
2. 依照精靈畫面的指示執行,並選擇您每晚想備份的磁碟區或資料夾。
3. 當 [儲存備份目的地] 對話方塊出現時,請在 [備份媒體類型] 區域中按一下磁帶機,再於 [備份媒體] 區域中,按一下與目前排定備份的日期相符的磁帶名稱 (如 Monday-Full)。
4. 當 [完成備份精靈] 對話方塊出現時,請按一下 [進階] 。
5. 當 [媒體選項] 對話方塊出現時,請按一下 [用這個備份取代媒體上的資料] 。
6. 當 [備份標籤] 對話方塊出現時,請修改 [媒體標籤] 欄位的內容,使其與目前磁帶的媒體標籤相符。這樣做可以確保在下次進行週期性備份時,可以掛載同一日的磁帶。
7. 當 [何時製作備份] 對話方塊出現時,按一下 [稍後] ,再輸入一個描述性的工作名稱。
8. 按一下 [設定排程] ,排定備份在適當時間執行。若要讓這一天的備份週期性地執行,請按一下 [每週] (位於 [工作排程] 清單中。)
9. 對一週內的每一天重複上述步驟,排定備份每週重複發生。請確定您使用步驟 5 中正確的媒體標籤,以符合該日的磁帶名稱。
10. 確定目前備份之標籤磁帶已放入獨立磁帶媒體櫃中。

若想排定一個批次檔,在備份的同時還執行其他額外工作,您可以從 Ntbackup 中的 [排定工作] 標籤中檢視任何排定工作的內容,或在「控制台」中使用「排定的工作」工具,從排定的備份工作中複製備份指令字串。
然後將此字串置於個別的批次檔內,並將它 改成符合您需求的內容,再以 at 指令或「工作排程器」排定其時程。

下例是從上面所執行的某個已排程備份的內容複製而來的備份指令行:
C:\WINNT\system32\ntbackup.exe backup "@C:\Documents and Settings\bkupuser\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\daily.bks" /n "Monday-Full" /d "Mondays Full Backup" /v:no/r:no /rs:no /hc:on /m normal /j "Mondays Job" /l:f /t "Monday-Full"
注意 :最後的參數可能是 /g {guid},代表 RSM Logical_Media ID 而非 /t "tape_name"。{guid} 值是一個 32 位元值,形式為 "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"。

您可以使用其中一種參數,在批次檔中代表以及使用磁帶。除了查看已排程 的備份工作內容之外,所有邏輯媒體的 {guid} 值都可以使用以下的 Rsm.exe 指令擷取出來。這些值會依序列出,因此很難分辨哪一個 {guid} 值代表哪一捲磁帶。
Rsm.exe view /tlogical_media /guiddisplay

您也可以在批次檔中使用 Rsm.exe 指令行工具,指示 RSM 在完成備份後退出磁帶。
使用 Rsm.exe 併發出下列指令,即可擷取出實體媒體名稱,以搭配 [退出] 指令使用:
rsm view /tphysical_media

PHYSICAL_MEDIA

Monday-Full - 1
Tuesday-Full - 1
Wednesday-Full - 1
Thursday-Full - 1
Friday-Full - 1

此指令順利完成。

備份完成後,請在每一天的批次檔案中,使用 rsm eject 指令來退出該日的磁帶:
rsm eject /pf"Monday-Full - 1" /astart

下例顯示星期一要執行的備份批次檔範例:
echo off start /wait C:\WINNT\system32\ntbackup.exe backup "@C:\Documents and Settings\bkupuser\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\daily.bks" /n "Monday-Full" /d "Mondays Full Backup" /v:no/r:no /rs:no /hc:on /m normal /j "Mondays Job" /l:f /t "Monday-Full" rsm eject /pf"Monday-Full - 1" /astart

不受管理的方法
若要使用不受管理的方法,只需在備份指令字串的結尾使用 /um 參數 (switch) 即可。
這會告訴 Ntbackup 尋找第一個可用的磁帶、格式化該磁帶、再使用該磁帶進行目前的備份作業。您必須使用 /p 參數 (switch) 來指派一個媒體集區裝置 (例如, "8mm mp" );當您使用 /um 參數時。若這麼做,請勿使用下列參數:
/a
/g
/f
/t

當您使用 /um 參數時 (switch),Ntbackup 會在下列媒體集區中搜尋可用的媒體:
• 可用集區
• 匯入集區
• 無法辨識的集區
• 備份集區
當 Ntbackup 偵測出一個可用磁帶時,搜尋便停止,此磁帶會被格式化,並在未提示您輸入任何資料的情況下使用。
此指令不適用於磁帶載入程式,且只有在使用獨立磁帶裝置時才能使用。

注意 :某些低價的獨立式磁帶機不會通知 RSM 媒體已經變更。若您使用的是這一類的磁帶機,在下次備份週期時,備份報告中會記錄下列錯誤訊息之一:
• 未執行作業,因為沒有未使用的可用媒體。(The operation was not performed because no unused media was available)
-或-
• 未執行作業,因為找不到指定的媒體。(Operation was not performed, because the specified media cannot be found)
若要防止發生這些錯誤,請參閱下列文件,從中尋找解決或避開的方法:
267574 (http://support.microsoft.com/kb/267574/EN-US/) Scheduled Backup May Fail After Changing Media

使用 /um 參數時,建議您不要利用 /n 參數替媒體加上標籤。請讓備份作業使用預設的日期/時間作為標籤名稱和說明。這樣可以避免多重磁帶擁有相同的標籤名稱,否則可能造成 RSM 要求手動掛載磁帶,使得備份作業無法繼續以無人看管的方式自動完成。

下面是一個備份批次檔的範例: echo offstart /wait rsm.exe refresh /lf"Your_Library_Name"c:\winnt\system32\ntbackup.exe backup "@C:\Documents andSettings\bkupuser\Local Settings\Application Data\Microsoft\WindowsNT\NTBackup\data\daily.bks" /v:no /r:no /rs:no /hc:on /m normal/j "daily.job" /l:f /p "8mm mp" /um

如需所有可用備份參數 (switch) 的清單,或者這些範例中所用參數之詳細資訊,請鍵入下列指令,參閱 Ntbackup 說明檔: ntbackup /?

如需詳細資訊,請按一下下列文件編號,參閱 Microsoft Knowledge Base 中的這份文件:
234492 (http://support.microsoft.com/kb/234492/EN-US/) Windows Backup Creates New Tape GUID When Writing New Label
267574 (http://support.microsoft.com/kb/267574/EN-US/) Scheduled Backups Fail on Standalone Tape Drives After Changing Media
243260 (http://support.microsoft.com/kb/243260/EN-US/) Changed Parameters for Scheduled Backup Job May Not Be Saved

2008年12月11日 星期四

Oracle exp/imp的query參數

資料常有例行轉檔的需求,在MS SQL系列有BCP/DTS/SSIS還滿方便的,但Oracle就沒有這麼有彈性的工具,通常是使用SQL*Loader、exp/imp,google查到原來exp/imp是可以加上where查詢的,不過在不同平台會有字元逸脫的問題,範例如下:

@Windows:
exp ... query='where deptno=10'
exp ... query='where deptno=' '10' ' '
exp ... query='where deptno"<"10'

@Solaris(C shell):
exp ... query=\"where col1 < 1000\"
exp ... query=\"where col1 \< '1000'\"

@ Linux
exp ... query=\"where owner \= \'SYSTEM\'\"