我接近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限制。 –