我接近Express對主數據庫文件的10 GB限制。SQL Server Express 2008 10GB大小限制
主要的問題似乎是一些固定長度的char(500)
列永遠不會接近那個長度。
我有兩個表格,它們之間有大約200萬行。這兩個表格總計約8 GB的數據,其餘的則分佈在另外20個表格左右。這兩個表格各有2個char(500)
列。
我正在測試一種方法將這些列轉換爲varchar(500)
並恢復尾隨空格。
我嘗試這樣做:
Alter Table Test_MAILBACKUP_RECIPIENTS
Alter Column SMTP_address varchar(500)
GO
Alter Table Test_MAILBACKUP_RECIPIENTS
Alter Column EXDN_address varchar(500)
這迅速改變列的類型,但顯然沒有恢復的空間。
我可以看到成功地做到這一點的唯一方法是:
與
varchar(500)
列tempdb中創建一個新表,複製信息到臨時表中修剪掉尾部的空格,
刪除實際表,
重新創建與新的
varchar(500)
列的真實表,將信息複製回來。
我對這裏的其他想法持開放態度,因爲我必須在此過程完成時將我的應用程序脫機?
我很好奇的另一件事是主鍵標識列。 此表具有設置爲標識的主鍵字段。 我知道我必須使用Set Identity_Insert
來允許將記錄插入表中,並在完成時將其關閉。
如何重新創建表影響完成後插入表中的新記錄。或者這只是「微軟魔術」,我不需要擔心呢?
阿爾貝託嗨,這似乎正是我需要與PP4_MailBackup表做。我後來認爲我應該可以做你的建議,但不知道我是否可以像這樣寫一個專欄。有了這麼大的表格,我很難複製測試數據來嘗試一些東西。我不需要縮小數據庫,因爲我不缺少磁盤空間,但這應該可以解決我的10Gb限制。我還沒有嘗試過,但我會將您的答案標記爲解決方案。謝謝! –
如果您想首先進行測試併爲temp數據庫提供足夠的空間來創建'begin transaction',然後執行更新,並選擇一切正常,如果不僅僅是'rollback'(或'commit'使變化永久)。爲了安全起見,我大多數時間使用事務來執行這種類型的更新(如果您執行多個更新,您可以使用select @@ trancount來檢查您是否已經有活動事務)。 –
這是一個好主意。我需要學習如何做這種東西。我應該在臨時數據庫中有足夠的空間,除非它需要將我的文件流列存儲在那裏。我假設tempdb也會有一個與主數據庫相同的10Gb限制。 –