2017年4月19日 星期三

[oracle]Shrink時undo tablespace產生大量資料,不想留存那些資料時的應對

在做shrink時undo tablespace產生大量的資料,使用者希望不要留那些資料。
我想可能先建一個新的undo tablespace,完成之後再把新的undo tablespace刪除比較安全些。

請試試以下語法:
1.確認原本使用的 tablespace為何
show parameter undo;

















2.建立undo tablespace
CREATE UNDO TABLESPACE [tablespace_name] DATAFILE [datafile_route] SIZE [datafile_size] autoextend on;

3.設定使用該undo tablespace
alter system set undo_tablespace = [tablespace_name]

4.使用後設定回原本的undo tablespace
alter system set undo_tablespace = [tablespace_name]

5.刪除tablespace的內容與datafile
DROP TABLESPACE [tablespace_name] including contents and datafiles;


Drop時請務必小心,確認兩次在做Drop動作。

2017年4月14日 星期五

[ORACLE]shrink原理與注意事項

擔心LOG產生太大時,先修改TABLE為NOLOGGING模式:
alter table t1 nologging;

當Oracle 建置一個segment 的時候,會藉由HWM (Hight Water Mark)指標來記錄segment 內,有哪些blocks 是被使用過的
HWM 就像一個分屆點,一邊代表使用過的blocks,另一邊則是尚未被使用的blocks. 
HWM有一個特性,就是只會向尚未使用的blocks 方向移動,也就是說當資料不斷被insert 時,HWM會不斷向尚未使用blocks 方向移動,但當資料被delete 後,雖然有儲存資料的blocks 已經減少,並不會讓HWM向反方向移動, 要注意的是當insert 失敗也是會讓HWM移動,即使失敗後rollback 也不會讓HWM向下降
HWM以下如果存有太多空的blocks, 除了浪費空間之外,最明顯的缺點就是當Full Table Scan 時產生不必要的I/O, 因為Oracle 進行Full Table Scan 時,會讀取HWM以下的blocks
要調整HWM可以藉由下面的指令達成
1. export / import 
2. alter table table_name move; 
3. alter index index_table rebuild online; 
4. alter table table_name shrink space ; (only for Oracle 10g)
alter table XX move 使用table lock , alter table XX shrink space 使用row lock

Shrink Space Syntax
shrink space 的兩個必要條件 
1. Enable row movement 
2. Table 所在的tablespace 不能使用在segment space management manaual 的tablespace, 必須為auto
執行shrink space 分成兩個階段 
1. compact : 透過insert / delete 將資料盡量排例在segment 前面.這個階段會造成rowid的改變,因此需要enable row movement.
alter table TABLE_NAME enable row movement;
2. HWM 調整:這個階段是調整HWM位置,釋放表格空間
alter table <TABLE_NAME> shrink space compact ; 只會執行第一階段 
alter table <TABLE_NAME> shrink space ; 兩個階段都會執行 
alter table <TABLE_NAME> shrink space cascade ; 兩個階段都執行,並同時處理相關index 空間 
alter table <TABLE_NAME> modify lob (<lob_clomun>) (shrink space);
由於alter table TABLE_NAME enable row movement 可能會使的引用該table的object( ex procedure,package,view...) 變成invalid,所以執行後最後執行一下utlrp.sql 或 utlprp.sql 來編譯一下invalid object ,
utlrp.sql 或 utlprp.sql放在$ORACLE_HOME/rdbms/admin 目錄下,或者執行
UTL_RECOMP這個package

Shrink space script 
1. Normal Table
select'alter table '|| owner || '.' || table_name||' enable row movement;
'||chr(10)||'alter table '|| owner || '.'||table_name||' shrink space;'||chr(10)
from  dba_tables;

select'alter index '|| owner || '.' ||index_name||' shrink space;'||chr(10)<
from dba_indexes;
2. Partition Table
select 'alter table '|| owner || '.'  ||table_name||' enable row movement;'||chr(10)||
'alter table '|| owner || '.'||table_name||' shrink space;'||chr(10) from dba_tables 

select 'alter index '|| owner || '.'||index_name||' shrink space;'||chr(10)
from dba_indexes where uniqueness='NONUNIQUE' ;

select 'alter table '|| owner || '.'||segment_name||' modify subpartition '||partition_name||' shrink space;'||chr(10) 
from dba_segments where segment_type='TABLE SUBPARTITION' ; 

資料引用自:
http://rickyju.pixnet.net/blog/post/32217992
http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/schema.htm#sthref2096

2017年4月13日 星期四

[MSSQL]使用PAL進行MSSQL效能檢測

https://dotblogs.com.tw/jamesfu/archive/2012/12/07/perfmon.aspx

https://social.technet.microsoft.com/Forums/zh-TW/c6cb2234-f834-495b-aa66-5fcc3b95b243/palperformance-analysis-of-logs?forum=winserverzhcht

[oracle]檢查目前事件

https://community.oracle.com/thread/358789?start=15&tstart=0

select a.event , a.WAIT_TIME , c.SQL_TEXT , c.PHYSICAL_READ_BYTES / 1024 / 1024 / 1024 "GB_READ" , c.PHYSICAL_WRITE_BYTES / 1024 / 1024 / 1024 "GB_WRITE"
from v$session_wait a , v$session b , v$sql c
where a.SID = $SID
and a.sid = b.sid
and b.SQL_ID = c.SQL_ID;