SQL Server实用经验技巧集(1)

SQL Server实用经验技巧集(1),第1张

此文是Sql Server实用 *** 作小技巧集合 包括安装时提示有挂起的 *** 作 收缩数据库 压缩数据库 转移数据库给新用户以已存在用户权限 检查备份集 修复数据库等 (一)挂起 *** 作 在安装Sql或sp补丁的时候系统提示之前有挂起的安装 *** 作 要求重启 这里往往重启无用 解决办法 到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager删除PendingFileRenameOperations (二)收缩数据库 重建索引DBCC REINDEXDBCC INDEXDEFRAG 收缩数据和日志DBCC SHRINKDBDBCC SHRINKFILE (三)压缩数据库 dbcc shrinkdatabase(dbname) (四)转移数据库给新用户以已存在用户权限 exec sp_change_users_login update_one newname oldname go (五)检查备份集 RESTORE VERIFYONLY from disk= E:\dvbbs bak (六)修复数据库 ALTER DATABASE [dvbbs] SET SINGLE_USERGODBCC CHECKDB( dvbbs repair_allow_data_loss) WITH TABLOCKGOALTER DATABASE [dvbbs] SET MULTI_USERGO CHECKDB 有 个参数: REPAIR_ALLOW_DATA_LOSS执行由 REPAIR_REBUILD 完成的所有修复 包括对行和页进行分配和取消分配以改正分配错误 结构行或页的错误 以及删除已损坏的文本对象 这些修复可能会导致一些数据丢失 修复 *** 作可以在用户事务下完成以允许用户回滚所做的更改 如果回滚修复 则数据库仍会含有错误 应该从备份进行恢复 如果由于所提供修复等级的缘故遗漏某个错误的修复 则将遗漏任何取决于该修复的修复 修复完成后 备份数据库 REPAIR_FAST 进行小的 不耗时的修复 *** 作 如修复非聚集索引中的附加键 这些修复可以很快完成 并且不会有丢失数据的危险 REPAIR_REBUILD 执行由 REPAIR_FAST 完成的所有修复 包括需要较长时间的修复(如重建索引) 执行这些修复时不会有丢失数据的危险 DBCC CHECKDB( dvbbs ) with NO_INFOMSGS PHYSICAL_ONLY SQL SERVER日志清除的两种方法 在使用过程中大家经常碰到数据库日志非常大的情况 在这里介绍了两种处理方法…… 方法一 一般情况下 SQL数据库的收缩并不能很大程度上减小数据库大小 其主要作用是收缩日志大小 应当定期进行此 *** 作以免数据库日志过大 设置数据库模式为简单模式 打开SQL企业管理器 在控制台根目录中依次点开Microsoft SQL Server >SQL Server组 >双击打开你的服务器 >双击打开数据库目录 >选择你的数据库名称(如论坛数据库Forum) >然后点击右键选择属性 >选择选项 >在故障还原的模式中选择 简单 然后按确定保存 在当前数据库上点右键 看所有任务中的收缩数据库 一般里面的默认设置不用调整 直接点确定 收缩数据库完成后 建议将您的数据库属性重新设置为标准模式 *** 作方法同第一点 因为日志在一些异常情况下往往是恢复数据库的重要依据 方法二 SET NOCOUNT ONDECLARE @LogicalFileName sysname @MaxMinutes INT @NewSize INTUSE tablename 要 *** 作的数据库名SELECT @LogicalFileName = tablename_log 日志文件名@MaxMinutes = Limit on time allowed to wrap log @NewSize = 你想设定的日志文件的大小(M) Setup / initializeDECLARE @OriginalSize intSELECT @OriginalSize = sizeFROM sysfilesWHERE name = @LogicalFileNameSELECT Original Size of + db_name() + LOG is +CONVERT(VARCHAR( ) @OriginalSize) + K pages or +CONVERT(VARCHAR( ) (@OriginalSize / )) + MB FROM sysfilesWHERE name = @LogicalFileNameCREATE TABLE DummyTrans(DummyColumn char ( ) not null)DECLARE @Counter  INT @StartTime DATETIME @TruncLog VARCHAR( )SELECT @StartTime = GETDATE() @TruncLog = BACKUP LOG + db_name() + WITH TRUNCATE_ONLY DBCC SHRINKFILE (@LogicalFileName @NewSize)EXEC (@TruncLog) Wrap the log if necessary WHILE @MaxMinutes > DATEDIFF (mi @StartTime GETDATE()) time has not expiredAND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)AND (@OriginalSize / ) > @NewSizeBEGIN Outer loop SELECT @Counter = WHILE ((@Counter < @OriginalSize / ) AND (@Counter < ))BEGIN updateINSERT DummyTrans VALUES ( Fill Log )DELETE DummyTransSELECT @Counter = @Counter + ENDEXEC (@TruncLog)ENDSELECT Final Size of + db_name() + LOG is +CONVERT(VARCHAR( ) size) + K pages or +CONVERT(VARCHAR( ) (size / )) + MB FROM sysfilesWHERE name = @LogicalFileNameDROP TABLE DummyTransSET NOCOUNT OFF lishixinzhi/Article/program/SQLServer/201311/22232

方法1:增加备份用硬盘或删除现有硬盘中没用的文件腾出磁盘空间

方法2:删除数据库中没用的数据,减小数据库的容量

方法3:尝试收缩数据库(不建议使用此方法,容易造成数据碎片,导致数据库运行缓慢)

收缩数据库有一定的风险!!空间够得话备份一下吧!!以防万一!!

注意:

1:不要再系统繁忙的时候做!会造成系统繁忙!估计用户会有反应的

最好是在没人用的情况下收缩数据库,如吃饭时间,这样不会对系统造成太大的影响

2:频繁做收缩,那索引碎片会越来越多,查询会越来越慢

这个方法很多:

1限制数据库日志文件的自动增长:

ALTER DATABASE 数据库

MODIFY FILE ( NAME = N'日志的逻辑名称', SIZE = 100000KB , FILEGROWTH = 0)

2收缩数据库:

DBCC SHRINKFile(N'日志文件逻辑名称',100)

3更改数据库恢复模式:

ALTER DATABASE 数据库 SET RECOVERY Simple WITH NO_WAIT

4备份日志文件:

backup log 数据库 to disk='D:\文件名'

1先分离数据库,然后删除日志文件,再附件数据库。

2收缩文件,选择日志文件,设置将文件收缩到0M,试了一下,只能从65G收缩到55G,也就是只释放了未使用的空间。方法 二、

1选中数据库,右键属性/选项,把恢复模式从“完整”改为“简单”。

2选中数据库,右键任务/收缩文件,选择日志文件,设置将文件收缩为0M,确定。

3再将恢复模式从“简单”-“完整”即可。

--------------------------------------------------

方案1: 所以可以执行以下sql语句:

DUMP TRANSACTION 你的数据库名 WITH NO_LOG

BACKUP LOG 你的数据库名 WITH NO_LOG

DBCC SHRINKDATABASE(你的数据库名)

EXEC sp_dboption '你的数据库名', 'autoshrink', 'TRUE'方案2:

在数据库的属性里-选择选项-恢复模式改为“简单”-勾选“自动收缩”。这样就可以自动进行数据库的收缩,推荐采用这种自动方式进行

--------------------------------------------------

SQLSERVER收缩事务日志

一、由于系统中录入及删除数据频繁,故事务日志很大。

SQLSERVER中讲:

BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。

但我在数据库中进行上述 *** 作后,事务日志还是没有改变。

二、只有进行“数据库收缩” *** 作。

在此复选框中打勾

选中上图所示选项,即可点“确定“,执行收缩事务日志的 *** 作,硬盘经过一段时间的工作后,SQLSERVER终于提示收缩成功。事务日志文件被恢复到原始尺寸。

综上所述,第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项 *** 作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。

在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 - 所有任务 - 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了

以上就是关于SQL Server实用经验技巧集(1)全部的内容,包括:SQL Server实用经验技巧集(1)、SqlServer备份问题,磁盘空间不足(112)、收缩数据库 是否有风险等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10174445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存