SQL Server 2000删除实战演习

我们今天是要和大家一起讨论的是SQL Server 2000删除日志,如果你对SQL Server 2000删除日志的实际操作步骤心存好奇的话,以下的文章将会揭开它的神秘面纱,以下就是具体方案的描述,希望在你今后的学习中会有所帮助。

一. 删除LOG

1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库

 

2:删除LOG文件

 

3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库

 

此法生成新的LOG,大小只有520多K

 

再将此数据库设置自动收缩

 

或用代码:

 

下面的示例分离 testdatabase,然后将 testdatabase 中的一个文件附加到当前服务器。

 

 
 
 
  1. EXEC sp_detach_db @dbname = 'testdatabase' 
  2. EXEC sp_attach_single_file_db @dbname = 'testdatabase',   
  3. @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\testdatabase.mdf' 

二.清空日志

DUMP TRANSACTION 库名 WITH NO_LOG

 

再:

 

企业管理器右键你要压缩的数据库所有任务收缩数据库收缩文件选择日志文件在收缩方式

 

里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

 

三.如果想以后不让它增长

 

企业管理器->服务器->数据库->属性->事务日志->将文件增长限制为2M

 

自动收缩日志,也可以用下面这条语句

ALTER DATABASE 数据库名

 

SET AUTO_SHRINK ON

 

故障还原模型改为简单,用语句是

 

USE MASTER

 

GO

 

ALTER DATABASE 数据库名 SET RECOVERY SIMPLE

 

GO

 

-

 

截断事务日志:

 

 
 
 
  1. BACKUP LOG { database_name | @database_name_var }  
  2. {  
  3. [ WITH  
  4. { NO_LOG | TRUNCATE_ONLY } ]   

压缩SQL Server 2000删除日志及数据库文件大小

 

特别注意

 

请按步骤进行,未进行前面的步骤,请不要做后面的步骤

 

否则可能损坏你的数据库.

 

 

1.清空日志

 

DUMP TRANSACTION 库名 WITH NO_LOG

 

2.截断事务日志:

 

BACKUP LOG 数据库名 WITH NO_LOG

 

3.收缩数据库文件(如果不压缩,数据库的文件不会减小

 

企业管理器右键你要压缩的数据库所有任务收缩数据库收缩文件

 

选择SQL Server 2000删除日志文件在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,

 

确定就可以了

 

选择数据文件在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,

 

确定就可以了

 

也可以用SQL语句来完成

 

收缩数据库

 

DBCC SHRINKDATABASE(客户资料)

 

收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles

 

DBCC SHRINKFILE(1)

 

4.为了***化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)

 

a.分离数据库:

 

企业管理器服务器数据库右键分离数据库

 

b.在我的电脑中删除LOG文件

 

c.附加数据库:

 

企业管理器服务器数据库右键附加数据库

 

此法将生成新的LOG,大小只有500多K

 

或用代码:

 

下面的示例分离 testdatabase,然后将 testdatabase 中的一个文件附加到当前服务器。

 

a.分离

 

 
 
 
  1.  
 
 
 
  1. EXEC sp_detach_db @dbname = 'testdatabase' 

b.删除日志文件

 

c.再附加

 

 
 
 
  1. EXEC sp_attach_single_file_db @dbname = 'testdatabase',   
  2. @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\testdatabase.mdf' 

5.为了以后能自动收缩,做如下设置:

 

企业管理器服务器右键数据库属性选项选择"自动收缩"

 

SQL语句设置方式:

 

EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'

 

6.如果想以后不让它SQL Server 2000删除日志增长得太大

 

企业管理器服务器右键数据库属性事务日志

 

将文件增长限制为xM(x是你允许的***数据文件大小)

 

SQL语句的设置方式:

 

alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)

 

 

压缩数据库的通用存储过程

 

压缩日志及数据库文件大小

 

因为要对数据库进行分离处理

 

所以存储过程不能创建在被压缩的数据库中

 

 

调用示例

 

exec p_compdb 'test'

 

 

use master 注意,此存储过程要建在master数据库中

 

 
 
 
  1. go  
  2. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_compdb]') and   
  3. OBJECTPROPERTY(id, N'IsProcedure') = 1)  
  4. drop procedure [dbo].[p_compdb]  
  5. GO  
  6. create proc p_compdb 

@dbname sysname, 要压缩的数据库名

@bkdatabase bit=1, 因为分离SQL Server 2000删除日志的步骤中,可能会损坏数据库,所以你可以选择是否自动数据库

 

@bkfname nvarchar(260)='' 备份的文件名,如果不指定,自动备份到默认备份目录,备份文件名为:数

 

据库名+日期时间#p#

 

as

 

1.清空日志

 

 
 
 
  1.  
 
 
 
  1. exec('DUMP TRANSACTION ['+@dbname+'] WITH NO_LOG') 

2.截断事务日志:

 

 
 
 
  1.  
 
 
 
  1. exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG') 

3.收缩数据库文件(如果不压缩,数据库的文件不会减小

 

 
 
 
  1.  
 
 
 
  1. exec('DBCC SHRINKDATABASE(['+@dbname+'])') 

4.设置自动收缩

 

 
 
 
  1.  
 
 
 
  1. exec('EXEC sp_dboption '''+@dbname+''',''autoshrink'',''TRUE''') 

后面的步骤有一定危险,你可以可以选择是否应该这些步骤

 

5.分离数据库

 

 
 
 
  1. if @bkdatabase=1 
  2. begin  
  3. if isnull(@bkfname,'')=''   
  4. set @bkfname=@dbname+'_'+convert(varchar,getdate(),112)  
  5. +replace(convert(varchar,getdate(),108),':','') 

select 提示信息='备份数据库到SQL 默认备份目录,备份文件名:'+@bkfname

 

 
 
 
  1. exec('backup database ['+@dbname+'] to disk='''+@bkfname+'''')  
  2. end 

进行分离处理

 

 
 
 
  1. create table #t(fname nvarchar(260),type int)  
  2. exec('insert into #t select filename,type=status&0x40 from ['+@dbname+']..sysfiles')  
  3. exec('sp_detach_db '''+@dbname+'''') 

删除SQL Server 2000删除日志文件

 

 
 
 
  1. declare @fname nvarchar(260),@s varchar(8000)  
  2. declare tb cursor local for select fname from #t where type=64 
  3. open tb   
  4. fetch next from tb into @fname  
  5. while @@fetch_status=
  6. begin  
  7. set @s='del "'+rtrim(@fname)+'"'  
  8. exec master..xp_cmdshell @s,no_output  
  9. fetch next from tb into @fname  
  10. end  
  11. close tb  
  12. deallocate tb 

附加数据库

 
 
 
  1. set @s='' 
  2. declare tb cursor local for select fname from #t where type=
  3. open tb   
  4. fetch next from tb into @fname  
  5. while @@fetch_status=
  6. begin  
  7. set @s=@s+','''+rtrim(@fname)+''''  
  8. fetch next from tb into @fname  
  9. end  
  10. close tb  
  11. deallocate tb 

以上的相关内容就是对SQL Server 2000删除日志的介绍,望你能有所收获。

【编辑推荐】

  1. SQL Server全文索引的实例演示
  2. SQL Server置疑的出现的原因,现象与破解
  3. SQL Server所有表的列信息展示
  4. 实现SQL Server 2000全文索引迁移步骤
  5. SQL Server数据库连接,Web.config的正确配置
THE END