大容量加载数据到现有表以及sql server数据库删除聚集索引的问题

kkcool 2009-09-21 07:04:03
环境:sql server 2005

场景:
现在要从平面文件中大容量加载数据到已有表中,已有表中已经存在大量的数据,当然也有聚集索引(主键)和非聚集 索引,为了防止事务日志膨胀过于厉害,要确保日志只做最小记录。

其中的一个步骤是将数据库回复模式设置成大容量日志恢复模式,但是这样好像是不够的,还需要删除索引,那么,问题是怎么样删除聚集索引(在主键上),因为主键上有唯一约束,所以在用户界面中直接删是删不掉的,约束文件夹中也没有这个约束,右键这个聚集索引后,将界面上的唯一复选框勾掉也不行,请问这个问题怎么解决,sql语句 和 直接界面操作都可以,不过sql语句我查到过一些,主要是想知道sql有没有提供这样的用户界面,不用写语句。

另:大容量加载数据到一个sql server数据库中,大家一般会怎么做,bcp?bulk insert?openrowset?向导?还有别的?。
数据库的日志满了以后大家一般怎么做,或者说怎么做好些,备份然后删除然sql自动创建一个新的?还是收缩?截断?

初学,谢谢
...全文
300 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kkcool 2009-09-22
  • 打赏
  • 举报
回复
插入大量数据的时候,日志的问题不说,表中大量索引的维护开销也会造成严重的的阻塞,这种问题难道只能通过分区来解决么?在2005以前的版本就要不断地建立新表?
kkcool 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 soft_wsx 的回复:]
引用 8 楼 kkcool 的回复:
引用 2 楼 lg314 的回复:
楼主想不删除主键的情况下只把主键的聚集索引删掉??这个貌似不行


是,不能删除主键
设计表!取消主健不行吗?
[/Quote]

你在往已有数据的表中追加大量数据的时候是怎么做的?有么有什么好方法
kkcool 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 claro 的回复:]
大数据量加载到库可以用SSIS完成,这样便于检查和保持易用性。
对于日志如果没有特别要求,比如从日志恢复数据,则将数据库设置为简单模式,这样产生日志非常小,不过备份显得非常重要。
简单模式下日志增大,可以完全备份并清除log。
[/Quote]

谢谢你的帮忙,不过我这个问题是在设置成大容量恢复模式的时候遇到的,所以我想在大容量模式下解决它
--小F-- 2009-09-22
  • 打赏
  • 举报
回复
楼主 不删除主键而删除聚集索引好象是不行的 除非你取消主键或者删除主键
kkcool 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 soft_wsx 的回复:]
对楼主的意思,不是完全明白!
[/Quote]

就是要做到只做最小记录,只设置成大容量恢复模式是不够的,还要删除索引,问题是怎么删除聚集索引,如果不删除的话,即使恢复模式设置成了大容量模式,仍旧会记录完整的日志
soft_wsx 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kkcool 的回复:]
引用 2 楼 lg314 的回复:
楼主想不删除主键的情况下只把主键的聚集索引删掉??这个貌似不行


是,不能删除主键
[/Quote]设计表!取消主健不行吗?
kkcool 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lg314 的回复:]
楼主想不删除主键的情况下只把主键的聚集索引删掉??这个貌似不行
[/Quote]

是,不能删除主键
claro 2009-09-22
  • 打赏
  • 举报
回复
大数据量加载到库可以用SSIS完成,这样便于检查和保持易用性。
对于日志如果没有特别要求,比如从日志恢复数据,则将数据库设置为简单模式,这样产生日志非常小,不过备份显得非常重要。
简单模式下日志增大,可以完全备份并清除log。
htl258_Tony 2009-09-21
  • 打赏
  • 举报
回复
SQL日志文件增的太快处理
方法1、
--在查询分析器,选中所要清理日志的数据库,执行如下SQL
backup log 数据库名 with no_log
DBCC SHRINKFILE ( 日志文件名或日志文件ID,要缩小的目标大小)

在当前数据库下
select fileid,groupid,name from sysfiles where groupid=0
/*
----------------------------------------
得到以下结果
fileid groupid name
2 0 test_log
*/

--以上结果,fileid为日志文件ID,name为test_log

你可以
backup log test with no_log
dbcc shrinkfile (2,2)
or
backup log test with no_log
dbcc shrinkfile ('test_log',2)
--***********************************************************************************************
如果以后,不想要它变大,在数据库上点右键->属性->选项->故障恢复 模型 选择 简单模型就可以了!
或用SQL语句
alter database 数据库名 set recovery simple
--============================================================================================================
如果把还原模型调到简单,这样就不支持时间点还原了,但是日志文件会很小,如果数据比较重要推荐还是把数据库的还原模型调为完全。
--************************************************************************************************

方法2、企业管理器—>右键数据库—>所有任务—>收缩数据库—>文件按钮—>选中日志文件—>设置收缩操作选项—>确定。
lunzi028 2009-09-21
  • 打赏
  • 举报
回复

if(object_id('test') is not null )
drop table test
go

create table test (serv_id int primary key ,serv_name varchar(50))
go
------删除主键 聚集索引自动删除
alter table test drop constraint PK__test__1ED998B2
go
------重新建立主键 非聚集
alter table test add constraint pk_test primary key nonclustered (serv_id)
go
soft_wsx 2009-09-21
  • 打赏
  • 举报
回复
对楼主的意思,不是完全明白!
soft_wsx 2009-09-21
  • 打赏
  • 举报
回复
--备份数据库
BACKUP DATABASE testdb TO DISK='d:\data\testdb20070906.bak'
--清空日志
DUMP TRANSACTION testdb WITH NO_LOG
--截断事务日志
BACKUP LOG testdb WITH NO_LOG
--收缩数据库
DBCC SHRINKDATABASE(testdb)
--设置自动收缩
EXEC SP_DBOPTION testdb,AUTOSHRINK,TRUE
lg314 2009-09-21
  • 打赏
  • 举报
回复
楼主想不删除主键的情况下只把主键的聚集索引删掉??这个貌似不行
lg314 2009-09-21
  • 打赏
  • 举报
回复
用户界面就是在主键约束里面,然后右键,删除

但如果数据很大的话这样做可能超时,最好用语句做

alter table [tablename] drop constraint [PK_name]

34,597

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧