当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:21:00  来源:本站整理

Sql Server实用操作小本领调集(一)[MSSQL防范]

赞助商链接



  本文“Sql Server实用操作小本领调集(一)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

包含安装时提醒有挂起的操作、收缩数据库、紧缩数据库、转移数据库给新用户以已存在用户权限、查抄备份集、修复数据库等
(一)挂起操作
在安装Sql或sp补钉的时刻系统提醒之前有挂起的安装操作,要求重启,这里常常重启无用,办理办法:
到HKEY_LOCAL_MacHINE\SYSTEM\CurrentControlSet\Control\Session Manager
删除PendingFileRenameOperations

(二)收缩数据库
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收缩数据和日记
DBCC SHRINKDB
DBCC 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_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO


--CHECKDB 有3个参数:
--REPAIR_ALLOW_DATA_LOSS
--? 履行由 REPAIR_REBUILD 完成的全部修复,包含对行和页举行分配和撤消分配以改正分配错误、构造行或页的错误,以及删除已破坏的文本对象.这些修复大概会招致一些数据丧失.修复操作可以在用户事件下完成以答应用户回滚所做的更改.假如回滚修复,则数据库仍会含有错误,应当从备份举行恢复.假如由于所供应修复等级的来由遗漏某个错误的修复,则将遗漏任何取决于该修复的修复.修复完成后,备份数据库.
--REPAIR_FAST 举行小的、不耗时的修复操作,如修复非堆积索引中的附加键.这些修复可以很快完成,并且不会有丧失数据的危险.
--REPAIR_REBUILD 履行由 REPAIR_FAST 完成的全部修复,包含需求较长时间的修复(如重建索引).履行这些修复时不会有丧失数据的危险.

--DBCC CHECKDB('dvbbs') with NO_INFOMSGS,PHYSICAL_ONLY

sql server日记排除的两种办法
在利用历程中大家常常碰到数据库日记非常大的情形,在这里介绍了两种处理办法……

办法一

普通情形下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日记大小,该当按期举行此操作免得数据库日记过大
1、设置数据库情势为简单情势:翻开SQL企业管理器,在掌握台根目录中顺次点开Microsoft SQL Server-->SQL Server组-->双击翻开你的服务器-->双击翻开数据库目录-->挑选你的数据库名称(如论坛数据库Forum)-->然后点击右键挑选属性-->挑选选项-->在弊端复原的情势中挑选"简单",然后按肯定保存
2、在当前数据库上点右键,看全部任务中的收缩数据库,普通里面的默许设置不用调整,直接点肯定
3、收缩数据库完成后,倡议将您的数据库属性重新设置为尺度情势,操作办法同第一点,因为日记在一些非常情形下常常是恢复数据库的重要根据

办法二

SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
??????? @MaxMinutes INT,
??????? @NewSize INT


USE???? tablename???????????? -- 要操作的数据库名
SELECT? @LogicalFileName = 'tablename_log',? -- 日记文件名
@MaxMinutes = 10,?????????????? -- Limit on time allowed to wrap log.
??????? @NewSize = 1????????????????? -- 你想设定的日记文件的大小(M)

-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
? FROM sysfiles
? WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
??????? CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
??????? CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
? FROM sysfiles
? WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
? (DummyColumn char (8000) not null)


DECLARE @Counter?? INT,
??????? @StartTime DATETIME,
??????? @TruncLog? VARCHAR(255)
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 expired
????? AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)?
????? AND (@OriginalSize * 8 /1024) > @NewSize?
? BEGIN -- Outer loop.
??? SELECT @Counter = 0
??? WHILE? ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
????? BEGIN -- update
??????? INSERT DummyTrans VALUES ('Fill Log')?
??????? DELETE DummyTrans
??????? SELECT @Counter = @Counter + 1
????? END??
??? EXEC (@TruncLog)?
? END??
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
??????? CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
??????? CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
? FROM sysfiles
? WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF

?

删除数据库中反复数据的几个办法
数据库的利用历程中由于程序方面的问题有时刻会碰到反复数据,反复数据招致了数据库部份设置不能精确设置……

办法一

declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0

办法二

有两个意义上的反复记录,一是完好反复的记录,也即全部字段均反复的记录,二是部份关键字段反复的记录,比方Name字段反复,而其他字段不一定反复或都反复可以忽视.
1、关于第一种反复,对比简单办理,利用
??? select distinct * from tableName
便可以得到无反复记录的后果集.
假如该表需求删除反复的记录(反复记录保存1条),可以按以下办法删除
??? select distinct * into #Tmp from tableName
??? drop table tableName
??? select * into tableName from #Tmp
??? drop table #Tmp
发生这种反复的缘由是表计划不周产生的,增添唯一索引列便可办理.

2、这类反复问题普通要求保存反复记录中的第一条记录,操作办法以下
??? 假定有反复的字段为Name,Address,要求得到这两个字段唯一的后果集
??? select identity(int,1,1) as autoID, * into #Tmp from tableName
??? select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
??? select * from #Tmp where autoID in(select autoID from #tmp2)
??? 最后一个select即得到了Name,Address不反复的后果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

?

更改数据库中表的所属用户的两个办法
大家大概会常常碰到一个数据库备份复原到别的一台机械后果招致全部的表都不能翻开了,缘由是建表的时刻采取了当时的数据库用户……


--更改某个表
exec sp_changeobjectowner 'tablename','dbo'


--存储更改全部表
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS

DECLARE @Name?? as NVARCHAR(128)
DECLARE @Owner? as NVARCHAR(128)
DECLARE @OwnerName? as NVARCHAR(128)

DECLARE curObject CURSOR FOR
select 'Name'?? = name,
? 'Owner'?? = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name

OPEN? curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN????
if @Owner=@OldOwner
begin
? set @OwnerName = @OldOwner + '.' + rtrim(@Name)
? exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner

FETCH NEXT FROM curObject INTO @Name, @Owner
END

close curObject
deallocate curObject


GO


SQL SERVER中直接循环写入数据
没什么好说的了,大家自己看,有时刻有点用处

declare @i int
set @i=1
while @i<30
begin
?? insert into test (userid) values(@i)
?? set @i=@i+1
end

?   以上是“Sql Server实用操作小本领调集(一)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • Windows 搭配 IIS7 PHP MySQL 环境
  • sqlserver索引的原理及索引成立的注意事项小结
  • SQL Join的一些总结(实例)
  • SQL的Join利用图解教程
  • SQL中JOIN和UNION辨别、用法及示例介绍
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .