2010年2月11日 星期四

Orakill也有失靈的時候

如果您遇到Orakill也砍不掉的Session,那建議你查閱一下Alert.log裡是否有以下的訊息:

orakill: ssthreadkill(tid=1988) unable to get the thread list mutex: err=0

如果有,那恭喜諸公,您又中Bug了。查詢過 Metalink後,確認為 Bug. 5753801,需要上10.2.0.3 Patch 21 or later後才能解決。

Oracle 10g 統計值匯入緩慢的問題

每天我都會以Data Pump的方式Export 一個約30G左右的 dump檔,然後再以Import (Content = ALL)到另外一台等級相同的的主機上;但令人訝異的,Schema的建立、Data 的 Import、以及Index的建立也僅大約花了三小時,而統計值的匯入卻足足花了8小時左右。查閱了metalink後,有個 Bug 5076838: IMPDP TAKES OVER 16 HOURS TO IMPORT TABLE_STATISTICS 指出了相同的問題,並且要到11g才會修正。Oracle對此也無workaround 解法。根據其他人的測試,主要原因可能是出在於 remap_* 的參數使然,只要target 的tablespace或schema不一樣,就會造成long~~long~~long~的等待。 對此,11g似乎才是磐涅之道。

就測試目的來說,remap_*是很常見的需求,正式區的資料也因此可restore到各式schema或tablespace內,以供各種測試目的專案執行。這種基本功都沒做好,真會讓人傷心的又訝異低。

SPOOL小技巧--砍掉欄位跟完成的提示訊息

工作上常透過SPOOL指令產出SQL指令批次檔,但如果只是簡單的將SPOOL ON/OFF的指令開關話,輸出的指令通常會有你不想要的額外訊息;舉例來說,

SPOOL D:\Autojob\Restore\ALTER.TXT;
select 'ALTER SYSTEM KILL SESSION' || ' ''' || sid || ',' || serial# || ''';' from v$session where username='SCHEMA_USER';
SPOOL OFF;
@D:\Autojob\Restore\ALTER.TXT;
exit;

ALERT.TXT通常會長成這樣:

'ALTERSYSTEMKILLSESSION'||''''||SID||','||SERIAL#||''';'
--------------------------------------------------------------------------------
ALTER SYSTEM KILL SESSION '521,415';
ALTER SYSTEM KILL SESSION '522,2428';
ALTER SYSTEM KILL SESSION '529,4564';
ALTER SYSTEM KILL SESSION '531,8493';
ALTER SYSTEM KILL SESSION '534,8057';
ALTER SYSTEM KILL SESSION '545,3068';
ALTER SYSTEM KILL SESSION '550,2691';

已選取 7 個資料列.

檔案內容裡我們就只要中間的 alter 指令,但檔案頭尾的訊息卻最好給我眼不見為淨。要避免產出頭尾的訊息,再另外加上 SET HEADING OFF 以及 SET FEED OFF 兩個指令即可:

SPOOL D:\Autojob\Restore\ALTER.TXT;
SET HEADING OFF;
SET FEED OFF;
SELECT 'ALTER SYSTEM KILL SESSION' || ' ''' || sid || ',' || serial# || ''';' from v$session where username='SCHEMA_USER';
SPOOL OFF;
@D:\Autojob\Restore\ALTER.TXT;
exit;

產出的結果就會得到漂亮的純指令內容了:

ALTER SYSTEM KILL SESSION '521,415';
ALTER SYSTEM KILL SESSION '522,2428';
ALTER SYSTEM KILL SESSION '529,4564';
ALTER SYSTEM KILL SESSION '531,8493';
ALTER SYSTEM KILL SESSION '534,8057';
ALTER SYSTEM KILL SESSION '545,3068';
ALTER SYSTEM KILL SESSION '550,2691';