现在的位置: 首页 > 综合 > 正文

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

2018年05月04日 ⁄ 综合 ⁄ 共 4064字 ⁄ 字号 评论关闭

 http://topic.csdn.net/u/20090921/19/d997e7f6-7269-475d-b5d1-47cb5f0f3271.html

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

  • kkcool
  • (Wooooooooood木头刀)
  • 等 级:
  • 结帖率:
楼主发表于:2009-09-21 19:04:03

环境:sql server 2005

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

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

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

初学,谢谢

 
 

回复次数:14

  • lg314用户头像
  • lg314
  • (lg314)
  • 等 级:
#1楼 得分:0回复于:2009-09-21 19:11:21

用户界面就是在主键约束里面,然后右键,删除

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

SQL code
alter table [tablename] drop constraint [PK_name]

 

  • lg314用户头像
  • lg314
  • (lg314)
  • 等 级:
#2楼 得分:0回复于:2009-09-21 19:13:09

楼主想不删除主键的情况下只把主键的聚集索引删掉??这个貌似不行

 

  • soft_wsx用户头像
  • soft_wsx
  • (理想=200平米房+丰田普拉多)
  • 等 级:
#3楼 得分:0回复于:2009-09-21 19:14:55

SQL code
--备份数据库 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

 

  • soft_wsx用户头像
  • soft_wsx
  • (理想=200平米房+丰田普拉多)
  • 等 级:
#4楼 得分:0回复于:2009-09-21 19:15:38

对楼主的意思,不是完全明白!

 

#5楼 得分:0回复于:2009-09-21 23:42:25

SQL code
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

 

  • htl258用户头像
  • htl258
  • (Tony)
  • 等 级:
  • 3

#6楼 得分:0回复于:2009-09-21 23:59:38

SQL code
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、企业管理器—>右键数据库—>所有任务—>收缩数据库—>文件按钮—>选中日志文件—>设置收缩操作选项—>确定。

 
  • claro用户头像
  • claro
  • (tdhh)
  • 等 级:
#7楼 得分:0回复于:2009-09-22 06:52:30

大数据量加载到库可以用SSIS完成,这样便于检查和保持易用性。
对于日志如果没有特别要求,比如从日志恢复数据,则将数据库设置为简单模式,这样产生日志非常小,不过备份显得非常重要。
简单模式下日志增大,可以完全备份并清除log。

 
  • kkcool用户头像
  • kkcool
  • (Wooooooooood木头刀)
  • 等 级:
#8楼 得分:0回复于:2009-09-22 09:51:17

引用 2 楼 lg314 的回复:

楼主想不删除主键的情况下只把主键的聚集索引删掉??这个貌似不行

是,不能删除主键

 
  • soft_wsx用户头像
  • soft_wsx
  • (理想=200平米房+丰田普拉多)
  • 等 级:
#9楼 得分:0回复于:2009-09-22 09:52:22

引用 8 楼 kkcool 的回复:

引用 2 楼 lg314 的回复:
楼主想不删除主键的情况下只把主键的聚集索引删掉??这个貌似不行

是,不能删除主键

设计表!取消主健不行吗?

 
  • kkcool用户头像
  • kkcool
  • (Wooooooooood木头刀)
  • 等 级:
#10楼 得分:0回复于:2009-09-22 09:53:43

引用 4 楼 soft_wsx 的回复:

对楼主的意思,不是完全明白!

就是要做到只做最小记录,只设置成大容量恢复模式是不够的,还要删除索引,问题是怎么删除聚集索引,如果不删除的话,即使恢复模式设置成了大容量模式,仍旧会记录完整的日志

 
#11楼 得分:0回复于:2009-09-22 09:55:29

楼主 不删除主键而删除聚集索引好象是不行的 除非你取消主键或者删除主键

 
  • kkcool用户头像
  • kkcool
  • (Wooooooooood木头刀)
  • 等 级:
#12楼 得分:0回复于:2009-09-22 09:56:33

引用 7 楼 claro 的回复:

大数据量加载到库可以用SSIS完成,这样便于检查和保持易用性。
对于日志如果没有特别要求,比如从日志恢复数据,则将数据库设置为简单模式,这样产生日志非常小,不过备份显得非常重要。
简单模式下日志增大,可以完全备份并清除log。

谢谢你的帮忙,不过我这个问题是在设置成大容量恢复模式的时候遇到的,所以我想在大容量模式下解决它

 
  • kkcool用户头像
  • kkcool
  • (Wooooooooood木头刀)
  • 等 级:
#13楼 得分:0回复于:2009-09-22 09:58:15

引用 9 楼 soft_wsx 的回复:

引用 8 楼 kkcool 的回复:
引用 2 楼 lg314 的回复:
楼主想不删除主键的情况下只把主键的聚集索引删掉??这个貌似不行

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

你在往已有数据的表中追加大量数据的时候是怎么做的?有么有什么好方法

 
  • kkcool用户头像
  • kkcool
  • (Wooooooooood木头刀)
  • 等 级:
#14楼 得分:0回复于:2009-09-22 10:03:46

插入大量数据的时候,日志的问题不说,表中大量索引的维护开销也会造成严重的的阻塞,这种问题难道只能通过分区来解决么?在2005以前的版本就要不断地建立新表?

 

抱歉!评论已关闭.