如何刪除SQL SERVER 2000的記錄檔空間?

來源:互聯網
上載者:User

首先備份資料庫
然後備份檔案,備份記錄檔,可改名
在 查詢分析器裡執行 sp_attach_single_file_db,將產生新的記錄檔
具體怎麼做,我也沒做過,讓有經驗的人回答。,我去收集一下這方面的資料

從大洋網摘錄的方法,未試過
用 bcp命令把資料庫中的記錄都匯出來儲存到另一台機器,然後用truncate table tablename
的方式把所有記錄都清空,然後執行dump transaction dbname with no_log,發現log檔案已顯著減少,再用bcp命令匯入,匯入後log檔案又增大,但再用 dump transaction dbname with no_log,效果不僅是使日誌占的空間減少,記錄檔的size也顯著減少。

前幾天也碰到記錄檔過大的問題,資料庫實際大小為600M, 記錄檔實際大小為33M, 但記錄檔佔用空間為2.8G!!!
試了多種方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都沒辦法將檔案縮小。無論如何,這應該算SQL SERVER的一個BUG吧。

後來找到下面的代碼,就可以將記錄檔縮小到自己想要的大小了。把代碼COPY到查詢分析器裡,,然後修改其中的3個參數(資料庫名,記錄檔名,和目標記錄檔的大小),運行即可(我已經用過多次了)
-----
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
        @MaxMinutes INT,
        @NewSize INT

USE     Marias             -- 要操作的資料庫名
SELECT  @LogicalFileName = 'Marias_log',  -- 記錄檔名
@MaxMinutes = 10,               -- Limit on time allowed to wrap log.
        @NewSize = 100                  -- 你想設定的記錄檔的大小(M)

-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
  FROM sysfiles
  WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
        CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
        CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
  (DummyColumn char (8000) not null)

DECLARE @Counter   INT,
        @StartTime DATETIME,
        @TruncLog  VARCHAR(255)
SELECT  @StartTime = GETDATE(),
        @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
      AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) 
      AND (@OriginalSize * 8 /1024) > @NewSize 
  BEGIN -- Outer loop.
    SELECT @Counter = 0
    WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
      BEGIN -- update
        INSERT DummyTrans valueS ('Fill Log') 
        DELETE DummyTrans
        SELECT @Counter = @Counter + 1
      END  
    EXEC (@TruncLog) 
  END  
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
        CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
        CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF

理解日誌截斷選項
不同的備份日誌截斷選項經常被DBA新手所忽視。DBA新手通常並不知道選項存在或瞭解它們的作用。怎樣使用或什麼時候時候它們,以下的幾小節詳細解釋每個選項的作用以及在什麼時候使用它。
    TRUNCATE_ONLY
TRUNCATE_ONLY選項截掉交易記錄的非活動部分,而不備份(拷貝)日誌到備份裝置上。因為日誌沒有拷貝,所以在使用TRUNCATE_ONLY時,不必指明備份裝置。例如,用TRUNCATE_ONLY選項備份主要資料庫交易記錄的文法如下:
Backup Log master
WITH TRUNCATE_ONLY
在以下情況下使用TRUNCATE_ONLY:
如果你不是為了恢複目的使用交易記錄,並且依賴於完整Database Backup(完整或差異)。如果沒有執行Database Backup就使用TRUNCATE_ONLY選項,你將不能在帶有TRUNCATE_ONLY的BACKUP LOG命令執行時,恢複交易記錄非活動部分的已完成事務。
NO_LOG
當有NO_LOG選項的BACKUP LOG命令執行時,SQL SERVER不記錄BACKUP LOG命令,就截斷交易記錄的非活動部分。
僅當交易記錄完全填滿時才使用NO_LOG選項,當日誌完全填滿時,你不能通過執行一條普通的BACKUP LOG命令來截斷交易記錄。這樣是因為SQL SERVER試圖記錄BACKUP命令,而在交易記錄中卻沒有剩餘空間。和TRUNCATE_ONLY選項一樣,NO_LOG選項不需要備份裝置,因為日誌並不拷貝到裝置上去。
NO_TRUNCATE
當你試圖進入的資料庫被破壞並打算恢複資料庫時,使用NO_TRUNCATE選項。要使用NO_TRUNCATE,必須滿足以下條件:
交易記錄必須和資料庫在不同的裝置上。
MASTER資料庫必須沒有被破壞
NO_TRUNCATE記錄從最近一次交易記錄備份,到資料庫破壞點的所有交易記錄項。然後恢複交易記錄備份作為最近一次備份,它在恢複過程中,可精確到毫秒級。

很多時候,我們被資料庫記錄檔大小不斷在增加而困撓,雖然可以用截短交易記錄的命令dump transaction database_name with no_log來使日誌佔用實際物理log檔案的空間的百分比減小,但資料庫log檔案的把磁碟的空間霸佔著不用,使其他的程式所需的空間受到影響。為此,我做了很多次實驗,以探討能夠直接減小log檔案大小的方法,請方家指教!

根據db_option中的有關選項,在不同設定時,做dump transaction database_name with no_log操作後,發現log檔案的total space都不變化,只是used space變小,而free space相應變大。這樣的變化意味著,你以後的日誌還有可寫入的空間,因為空白間被預留了。但當這個log檔案已經太大,而影響了其他程式的使用空間時,這樣的結果並不是我需要的。

後來我做了一個這樣的操作,用bcp命令把資料庫中的記錄都匯出來儲存到另一台機器的硬碟上。然後用truncate table table_name的方式把所有的記錄都清空,然後執行dump transaction database_name with no_log,發現log檔案已經顯著地減小,再用bcp命令將之前置出的資料匯入到資料庫中,匯入完成後,log檔案又增大了,但再用dump transaction database_name with no_log命令操作時,效果不僅是使日誌佔用空間減少,記錄檔的size也顯著地減小。

對於以上現象,請有興趣的同道予以驗證,至於這個操作對資料庫的物件和完整性是否有影響,還望高手指教!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.