詳細步驟,已測試成功
1、備份數據庫,包括 master 和你要分離數據與日志的應用庫,最好是備份所有數據庫;
2、檢查數據庫的日志是否有單獨的存放設備,如有,則直接到第5步;
3、如沒有單獨的日志設備,則增加一個設備:disk init .....;
4、alter database db_name log on new_log_device=xxx;
5、sp_logdevice dbname,new_logdev (移動日志設備);
6、sp_dropsegment logsegment, db_name, device_name (如果數據庫有多個設備既放數據又放日志,則要相應的運行幾次;
7、創建一個臨時表,然後往裡面插入足夠的數據,然後截斷日志; use db_name
go
create table t1 (id int)
go
declare @loop int
select @loop = 1
while(@loop<500)
begin
insert t1 values(@loop)
select @loop = @loop + 1
end
go
dump tran db_name with truncate_only
go
8、到此,數據與日志的分離已經完成,使用sp_helpdb db_name或sp_helplog查看是否已分離。
增加和刪除 segment 並不移動當前的已分配空間。日志至少有一個擴充(extend)位於以前的 segment 上(還記得嗎,為對象分配存貯單元時,實際是以 extend 為單位的。)。如果當前 extend 被填滿,需要再為日志分配時,ASE會在新的 segment 上分配(segment 約束它不得不這麼做)。此時,截斷日志就可以回收以前分配的 extend 了。最後,還是要備份所有數據庫.