大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 数据库 -> MS_SQL -> SQL SERVER实用技巧

SQL SERVER实用技巧

时间: 2021-08-13 作者:daque

囊括安置时提醒有挂起的操纵、中断数据库、收缩数据库、变化数据库给新用户以已生存用户权力、查看备份集、建设数据库等   (一)挂起操纵 在安置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[page_break]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 多数据库日记文献回复数据库本领两则 数据库日记文献的误删或其余因为惹起数据库日记的破坏  本领一 1.兴建一个同名的数据库 2.再停掉sql server(提防不要辨别数据库) 3.用原数据库的数据文献掩盖掉这个兴建的数据库 4.再重启sql server 5.此时翻开企业处置器时会展示质疑,先尽管,实行底下的语句(提防窜改个中的数据库名) 6.实行后普遍就不妨考察数据库中的数据了,这时候,数据库自己普遍还要题目,处置方法是,运用 数据库的剧本创造一个新的数据库,并将数据导进去就行了. use master go sp_configure ’allow updates’,1 reconfigure with override go update sysdatabases set status =32768 where name=’质疑的数据库名’ go sp_dboption ’质疑的数据库名’, ’single user’, ’true’ go dbcc checkdb(’质疑的数据库名’)  go update sysdatabases set status =28 where name=’质疑的数据库名’ go sp_configure ’allow updates’, 0 reconfigure with override go  sp_dboption ’质疑的数据库名’, ’single user’, ’false’ go 本领二 工作的来由 昨天,体例处置员报告我,咱们一个里面运用数据库地方的磁盘空间不及了。我提防到数据库事变日记文献xxx_data.ldf文献仍旧延长到了3gb,所以我决定减少这个日记文献。过程中断数据库等操纵未果后,我犯了一个自加入行业此后的最大最笨拙的缺点:果然误简略了这个日记文献!厥后我看到一切论及数据库回复的作品上都说道:“不管怎样都要保护数据库日记文献生存,它至关要害”,以至微软以至有一篇kb作品讲怎样只靠日记文献回复数据库的。我真是不领会我其时候是如何想的?! 这下子坏了!这个数据库连不上了,企业处置器在它的左右写着“(质疑)”。并且最要命的,这个数据库历来没有备份了。我独一找获得的是迁徙半年前的其余一个数据库效劳器,运用倒是能用了,然而少了很多记载、表和保存进程。真蓄意这不过一场恶梦! 没有功效的回复办法 附加数据库 _rambo讲过被简略日记文献中不生存震动日记时,不妨这么做来回复: 1,辨别被质疑的数据库,不妨运用sp_detach_db 2,附加数据库,不妨运用sp_attach_single_file_db 然而,很可惜,实行之后,sql server置疑数据文献和日记文献不符,以是没辙附加数据库数据文献。 dts数据导出 不行,没辙读取xxx数据库,dts wizard汇报说“初始化左右文爆发缺点”。 重要形式 怡红令郎讲过没有日记用来回复时,不妨这么做: 1,把数据库树立为emergency mode  2,从新创造一个log文献 3,把sql server 从新启用一下 4,把运用数据库树立成单用户形式 5,做dbcc checkdb 6,即使没有什么大题目就不妨把数据库状况改回去了,牢记别忘了把体例表的窜改选项关掉 我试验了一下,把运用数据库的数据文献移走,从新创造一个同名的数据库xxx,而后停掉sql效劳,把从来的数据文献再掩盖回顾。之后,依照怡红令郎的办法走。 然而,也很可惜,除去第2步除外,其余办法实行特殊胜利。怅然,重启sql server之后,这个运用数据库仍旧是质疑! 然而,让我欣喜的是,这么做之后,倒是不妨select数据了,让我大出一口吻。只然而,组件运用数据库时,汇报说:“爆发缺点:-2147467259,未能在数据库 ’xxx’ 中运转 begin transaction,由于该数据库居于侧目回复形式。” 最后胜利回复的十足办法 树立数据库为重要形式         停掉sql server效劳;        把运用数据库的数据文献xxx_data.mdf移走;       从新创造一个同名的数据库xxx;        停掉sql效劳;       把从来的数据文献再掩盖回顾;      运转以次语句,把该数据库树立为重要形式;     运转“use master go sp_configure ’allow updates’, 1 reconfigure with override go” 实行截止: dbcc 实行结束。即使 dbcc 输入了缺点消息,请与体例处置员接洽。 已将摆设选项 ’allow updates’ 从 0 改为 1。请运转 reconfigure 语句以安置。 接着运转“update sysdatabases set status = 32768 where name = ’xxx’” 实行截止: (所感化的行数为 1 行)       重启sql server效劳;      运转以次语句,把运用数据库树立为single user形式;       运转“sp_dboption ’xxx’, ’single user’, ’true’” 实行截止:       吩咐已胜利实行。 ü         做dbcc checkdb;       运转“dbcc checkdb(’xxx’)” 实行截止: ’xxx’ 的 dbcc 截止。 ’sysobjects’ 的 dbcc 截止。 东西 ’sysobjects’ 有 273 行,那些行坐落 5 页中。 ’sysindexes’ 的 dbcc 截止。 东西 ’sysindexes’ 有 202 行,那些行坐落 7 页中。 ’syscolumns’ 的 dbcc 截止。 ……… ü         运转以次语句把体例表的窜改选项关掉;       运转“sp_resetstatus "xxx" go sp_configure ’allow updates’, 0 reconfigure with override go” 实行截止: 在 sysdatabases 中革新数据库 ’xxx’ 的条件之前,形式 = 0,状况 = 28(状况 suspect_bit = 0), 没有革新 sysdatabases 中的任何行,由于已精确地重置了形式和状况。没有缺点,未举行任何变动。 dbcc 实行结束。即使 dbcc 输入了缺点消息,请与体例处置员接洽。 已将摆设选项 ’allow updates’ 从 1 改为 0。请运转 reconfigure 语句以安置。     从新创造其余一个数据库xxx.lost; dts导出引导      运转dts导出引导;      复制源采用emergencymode的数据库xxx,导出到xxx.lost;         采用“在sql server数据库之间复制东西和数据”,试了屡次,犹如不行,不过复制过来了一切表构造,然而没罕见据,也没有视图和保存进程,并且dts引导结果汇报复制波折;        以是结果采用“从源数据库复构图和视图”,然而厥后创造,如许老是只能复制一局部表记载;       所以采用“用一条查问指定要传输的数据”,缺哪个表记载,就导哪个;         视图和保存进程是实行sql语句增添的。 保护sql server中表的索引 在运用和创造数据库索引中常常会碰到少许题目,在这边不妨沿用少许另类的本领处置… --第一步:察看能否须要保护,察看扫描密度/scan density能否为100% declare @table_id int set @table_id=object_id(’表名’) dbcc showcontig(@table_id) --第二步:重构表索引 dbcc dbreindex(’表名’,pk_索引名,100) --重做第一步,如创造扫描密度/scan density仍旧小于100%则重构表的一切索引 --杨铮:并不确定能达100%。 dbcc dbreindex(’表名’,’’,100) sql server补丁安置罕见题目 谁碰到题目就看看咯:)  一、补丁安置进程中罕见题目  即使在安置补丁的功夫遇到如次一致缺点:  1、安置进程中展示“以进步行的步调创造了挂起的文献操纵,运转安置步调前,必需从新启用”,请依照底下办法处置:  a、重启呆板,再举行安置,即使创造再有该缺点,请按底下办法  b、在发端->运转中输出regedit  c、到hkey_local_machine\system\currentcontrolset\control\session manager 场所  d、采用文献->倒出,生存  e、在右边窗口右击pendingfilerenameoperations,采用简略,而后确认  f、重启安置,题目处置  即使再有同样题目,请查看其它备案表中能否有该值生存,如有请删掉。  2、在安置sql server sp3,有功夫会展示:不管用windows认证仍旧混和认证,都展示暗号缺点的情景,这时候察看偶尔目次下的sqlsp.out,会创造以次刻画:  [tcp/ip sockets]specified sql server not found.  [tcp/ip sockets]connectionopen (connect()).  本来这是sql server sp3的一个小bug,在安置sp3的功夫,没有监听tcp/ip端口,不妨依照以次办法举行:  1、翻开sql server存户器搜集适用东西和效劳器搜集东西,保证起用的和议中包括name pipe,而且场所在第一位.  2、保证[hkey_local_machine\software\microsoft\mssqlserver\client\connectto]  "dsquery"="dbnetlib".  即使没有,请本人创造  3、遏止mssql.  4、举行安置.  如许就不妨举行精确安置了。 二、sql server补丁本子的查看  sql server的补丁本子查看不如windows 补丁本子查看径直,一个体例处置员,即使不领会sql server本子对应的补丁号,大概也会遇到一点烦恼,所以在这证明一下,经过如许的方法辨别呆板是安定的方法,不会对体例爆发任何感化。  1、用isql大概sql查问领会器登录到sql server,即使是用isql,请在cmd窗口输出isql -u sa,而后输出暗号,加入;即使是用sql查问领会器,请从步调中启用,输出sa和暗号(也不妨用windows考证)。  2、在isql中输出:  select @@version;  go  大概sql查问领会器中输出(本来即使不想输出,只有翻开扶助的对于就不妨了:))  select @@version;  而后按实行;  这时候会归来sql的本子消息,如次:  microsoft sql server 2000 - 8.00.760 (intel x86) dec 17 2002 14:22:05 copyright (c) 1988-2003 microsoft corporation enterprise edition on windows nt 5.0 (build 2195: service pack 3)  个中的8.00.760即是sql server的本子和补丁号。对应联系如次:  8.00.194 -——————sql server 2000 rtm  8.00.384 -——————(sp1)  8.00.534 -——————(sp2)  8.00.760 -——————(sp3)  如许咱们就能看到sql server的精确本子和补丁号了。  咱们也不妨用xp_msver看到更精细的消息 sql server数据库的备份和回复办法 最常用的操纵,生人们看看……  一、备份数据库  1、翻开sql企业处置器,在遏制台根目次中顺序点开microsoft sql server 2、sql server组-->双击翻开你的效劳器-->双击翻开数据库目次 3、采用你的数据库称呼(如乒坛数据库forum)-->而后点上头菜单中的东西-->采用备份数据库 4、备份选项采用实足备份,手段中的备份到即使从来有路途和称呼则选中称呼点简略,而后点增添,即使从来没有路途和称呼则径直采用增添,接着指定路途和文献名,指定后点决定归来备份窗口,接着点决定举行备份  二、恢复数据库 1、翻开sql企业处置器,在遏制台根目次中顺序点开microsoft sql server 2、sql server组-->双击翻开你的效劳器-->点图标栏的兴建数据库图标,兴建数据库的名字自行取 3、点击兴建好的数据库称呼(如乒坛数据库forum)-->而后点上头菜单中的东西-->采用回复数据库 4、在弹出来的窗口中的恢复选项中采用从摆设-->点采用摆设-->点增添-->而后采用你的备份文献名-->增添后点决定归来,这功夫摆设栏该当展示您方才采用的数据库备份文献名,备份号默许为1(即使您对同一个文献做过屡次备份,不妨点击备份号左右的察看实质,在复选框中采用最新的一次备份后点决定)-->而后点击上方惯例左右的选项按钮 5、在展示的窗口中采用在现罕见据库上强迫恢复,以及在回复实行状况中采用使数据库不妨连接运转但没辙恢复其它工作日记的选项。在窗口的中央部位的将数据库文献恢复为这边要依照你sql的安置举行树立(也不妨指定本人的目次),论理文献名不须要变换,移至物理文献名要按照你所回复的呆板情景做变换,如您的sql数据库装在d:\program files\microsoft sql server\mssql\data,那么就依照您回复呆板的目次举行关系变换变换,而且结果的文献名最佳改成您暂时的数据库名(如从来是bbs_data.mdf,此刻的数据库是forum,就改成forum_data.mdf),日记和数据文献都要依照如许的办法做关系的变换(日记的文献名是*_log.ldf结果的),这边的回复目次您不妨自在树立,基础是该目次必需生存(如您不妨指定d:\sqldata\bbs_data.mdf大概d:\sqldata\bbs_log.ldf),要不回复将报错 6、窜改实行后,点击底下的决定举行回复,这时候会展示一个进度条,提醒回复的进度,回复实行后体例会机动提醒胜利,如中央提醒报错,请记载下关系的缺点实质并咨询对sql操纵比拟熟习的职员,普遍的缺点无非是目次缺点大概文献名反复大概文献名缺点大概空间不够大概数据库正在运用中的缺点,数据库正在运用的缺点您不妨试验封闭一切对于sql窗口而后从新翻开举行回复操纵,即使还提醒正在运用的缺点不妨将sql效劳遏止而后重起看看,至于上述其它的缺点普遍都能依照缺点实质做相映变换后即可回复 三、中断数据库 普遍情景下,sql数据库的中断并不许很大水平上减少量据库巨细,其重要效率是中断日记巨细,该当按期举行此操纵免得数据库日记过大 1、树立数据库形式为大略形式:翻开sql企业处置器,在遏制台根目次中顺序点开microsoft sql server-->sql server组-->双击翻开你的效劳器-->双击翻开数据库目次-->采用你的数据库称呼(如乒坛数据库forum)-->而后点击右键采用属性-->采用选项-->在妨碍恢复的形式中采用“大略”,而后按决定生存 2、在暂时数据库上点右键,看一切工作中的中断数据库,普遍内里的默许树立不必安排,径直点决定 3、中断数据库实行后,倡导将您的数据库属性从新树立为规范形式,操纵本领同第一点,由于日记在少许特殊情景下常常是回复数据库的要害按照  四、设定每天机动备份数据库 激烈倡导有前提的用户举行此操纵! 1、翻开企业处置器,在遏制台根目次中顺序点开microsoft sql server-->sql server组-->双击翻开你的效劳器 2、而后点上头菜单中的东西-->采用数据库保护安置器 3、下一步采用要举行机动备份的数据

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.