2014年9月23日 星期二

DBCC SHRINKFILE遇到cannot be shrunk as it is either being shrunk by another process or is empty.

        先不管這件事好不好,同事因為磁碟空間不足去DBCC SHRINKFILE資料檔,結果遇到下面的錯誤

File ID # of database ID # cannot be shrunk as it is either being shrunk by another process or is empty.


        理論上SHIRKFILE不是獨佔的行為,不需要停機進行,而同事已經在應用停止的情況下作業了,也確認沒有另一個process在shirk,資料檔也是有剩餘幾十G的空間,但出現這錯真是奇怪

        上網搜尋了一下,這篇DBCC SHRINKFILE and SHRINKDATABASE failing after backup的解法竟然是建議對資料檔加大幾MB的空間,照著做再shirk還真的成功了,實在不解啊

2014年9月5日 星期五

[Oracle]Partition Table的維護

        如果分區表先天設計不良,後天要改又很麻煩,造成清除逾期資料無法用truncate partition來處理,只能用delete處理逾期資料,那會因為HWM高水位的問題造成資料表占用空間不斷成長,可以參考以下命令來針對partition table與partition index做搬移與重建,就可以釋放空間囉

--alter table TABLE_NAME  truncate partition PARTITION_NAME;

--查看資料表佔用空間
select SUM(BYTES)/1024/1024 SIZE_MB from DBA_SEGMENTS where SEGMENT_NAME='TABLE_NAME';

--查看索引佔用空間
select sum(bytes)/1024/1024 SIZE_MB from DBA_segments where segment_name IN (SELECT INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME='TABLE_NAME');

--產生搬移分區表命令
--alter table TABLE_NAME move  partition PARTITION_NAME
SELECT 'alter table ' || table_name || ' move  partition ' || partition_name from DBA_TAB_PARTITIONS WHERE TABLE_NAME= 'TABLE_NAME';

--因為搬移完分區表,分區索引會失效,所以要重建喔
--產生重建分區索引命令 
--alter index INDEX_NAME rebuild partition PARTITION_NAME TABLESPACE TABLESPACE_NAME
SELECT 'alter index '|| index_name ||'  rebuild partition  ' || partition_name || ' TABLESPACE ' || tablespace_name  from DBA_Ind_Partitions WHERE  index_name in (select index_name from dba_part_indexes where table_name = 'TABLE_NAME');

--檢查是否有無效的索引分區
SELECT * from DBA_Ind_Partitions WHERE  index_name in (select index_name from dba_part_indexes where table_name = 'TABLE_NAME') and status = 'UNUSABLE';




2014年9月3日 星期三

[SQL Server]Replication如何加入新的發行項

很簡單...紀錄一下...以免忘記

對Local Publications下你要加入新的發行項的發行集右鍵,選屬性

在Articles加入新增的資料表為發行項後