仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 763|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之SQL SERVER有用履历技能集 挑选自 ...

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:33:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在Windows中MySQL以服务形式存在,在使用前应确保此服务已经启动,未启动可用netstartmysql命令启动。而Linux中启动时可用“/etc/rc.d/init.d/mysqldstart"命令,注意启动者应具有管理员权限。server|技能
SqlServer有用操纵小技能汇合
包含安装时提醒有挂起的操纵、压缩数据库、紧缩数据库、转移数据库给新用户以已存在用户权限、反省备份集、修单数据库等
(一)挂起操纵
在安装Sql或sp补钉的时分体系提醒之前有挂起的安装操纵,请求重启,这里常常重启无用,办理举措:
到HKEY_LOCAL_MACHINEYSTEMCurrentControlSetControlessionManager
删除PendingFileRenameOperations

(二)压缩数据库
--重修索引
DBCCREINDEX
DBCCINDEXDEFRAG
--压缩数据和日记
DBCCSHRINKDB
DBCCSHRINKFILE

(三)紧缩数据库
dbccshrinkdatabase(dbname)

(四)转移数据库给新用户以已存在用户权限
execsp_change_users_loginupdate_one,newname,oldname
go

(五)反省备份集
RESTOREVERIFYONLYfromdisk=E:dvbbs.bak

(六)修单数据库
ALTERDATABASE[dvbbs]SETSINGLE_USER
GO
DBCCCHECKDB(dvbbs,repair_allow_data_loss)WITHTABLOCK
GO
ALTERDATABASE[dvbbs]SETMULTI_USER
GO


--CHECKDB有3个参数:
--REPAIR_ALLOW_DATA_LOSS
--实行由REPAIR_REBUILD完成的一切修复,包含对行和页举行分派和作废分派以更正分派毛病、布局行或页的毛病,和删除已破坏的文本工具。这些修复大概会招致一些数据丧失。修复操纵能够在用户事件下完成以同意用户回滚所做的变动。假如回滚修复,则数据库仍会含有毛病,应当从备份举行恢复。假如因为所供应修复品级的原因漏掉某个毛病的修复,则将漏掉任何取决于该修复的修复。修复完成后,备份数据库。
--REPAIR_FAST举行小的、不耗时的修复操纵,如修复非会萃索引中的附加键。这些修复能够很快完成,而且不会有丧失数据的伤害。
--REPAIR_REBUILD实行由REPAIR_FAST完成的一切修复,包含必要较长工夫的修复(如重修索引)。实行这些修复时不会有丧失数据的伤害。

--DBCCCHECKDB(dvbbs)withNO_INFOMSGS,PHYSICAL_ONLY

SQLSERVER日记扫除的两种办法
在利用过程当中人人常常碰着数据库日记十分年夜的情形,在这里先容了两种处置办法……

办法一

一样平常情形下,SQL数据库的压缩其实不能很年夜水平上减小数据库巨细,其次要感化是压缩日记巨细,应该按期举行此操纵以避免数据库日记过年夜
1、设置数据库形式为复杂形式:翻开SQL企业办理器,在把持台根目次中顺次点开MicrosoftSQLServer-->SQLServer组-->双击翻开你的服务器-->双击翻开数据库目次-->选择你的数据库称号(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在妨碍复原的形式当选择“复杂”,然后按断定保留
2、在以后数据库上点右键,看一切义务中的压缩数据库,一样平常内里的默许设置不必调剂,间接点断定
3、压缩数据库完成后,倡议将您的数据库属性从头设置为尺度形式,操纵办法同第一点,由于日记在一些非常情形下常常是恢单数据库的主要根据

办法二

SETNOCOUNTON
DECLARE@LogicalFileNamesysname,
@MaxMinutesINT,
@NewSizeINT


USEtablename--要操纵的数据库名
SELECT@LogicalFileName=tablename_log,--日记文件名
@MaxMinutes=10,--Limitontimeallowedtowraplog.
@NewSize=1--你想设定的日记文件的巨细(M)

--Setup/initialize
DECLARE@OriginalSizeint
SELECT@OriginalSize=size
FROMsysfiles
WHEREname=@LogicalFileName
SELECTOriginalSizeof+db_name()+LOGis+
CONVERT(VARCHAR(30),@OriginalSize)+8Kpagesor+
CONVERT(VARCHAR(30),(@OriginalSize*8/1024))+MB
FROMsysfiles
WHEREname=@LogicalFileName
CREATETABLEDummyTrans
(DummyColumnchar(8000)notnull)


DECLARE@CounterINT,
@StartTimeDATETIME,
@TruncLogVARCHAR(255)
SELECT@StartTime=GETDATE(),
@TruncLog=BACKUPLOG+db_name()+WITHTRUNCATE_ONLY

DBCCSHRINKFILE(@LogicalFileName,@NewSize)
EXEC(@TruncLog)
--Wrapthelogifnecessary.
WHILE@MaxMinutes>DATEDIFF(mi,@StartTime,GETDATE())--timehasnotexpired
AND@OriginalSize=(SELECTsizeFROMsysfilesWHEREname=@LogicalFileName)
AND(@OriginalSize*8/1024)>@NewSize
BEGIN--Outerloop.
SELECT@Counter=0
WHILE((@Counter<@OriginalSize/16)AND(@Counter<50000))
BEGIN--update
INSERTDummyTransVALUES(FillLog)
DELETEDummyTrans
SELECT@Counter=@Counter+1
END
EXEC(@TruncLog)
END
SELECTFinalSizeof+db_name()+LOGis+
CONVERT(VARCHAR(30),size)+8Kpagesor+
CONVERT(VARCHAR(30),(size*8/1024))+MB
FROMsysfiles
WHEREname=@LogicalFileName
DROPTABLEDummyTrans
SETNOCOUNTOFF



删除数据库中反复数据的几个办法
数据库的利用过程当中因为程序方面的成绩偶然候会碰着反复数据,反复数据招致了数据库部分设置不克不及准确设置……

办法一

declare@maxinteger,@idinteger
declarecur_rowscursorlocalforselect主字段,count(*)from表名groupby主字段havingcount(*)>1
opencur_rows
fetchcur_rowsinto@id,@max
while@@fetch_status=0
begin
select@max=@max-1
setrowcount@max
deletefrom表名where主字段=@id
fetchcur_rowsinto@id,@max
end
closecur_rows
setrowcount0

办法二

有两个意义上的反复纪录,一是完整反复的纪录,也即一切字段均反复的纪录,二是部分关头字段反复的纪录,好比Name字段反复,而其他字段纷歧定反复或都反复能够疏忽。
1、关于第一种反复,对照简单办理,利用
selectdistinct*fromtableName
就能够失掉无反复纪录的了局集。
假如该表必要删除反复的纪录(反复纪录保存1条),能够按以下办法删除
selectdistinct*into#TmpfromtableName
droptabletableName
select*intotableNamefrom#Tmp
droptable#Tmp
产生这类反复的缘故原由是表计划不周发生的,增添独一索引列便可办理。

2、这类反复成绩一般请求保存反复纪录中的第一笔记录,操纵办法以下
假定有反复的字段为Name,Address,请求失掉这两个字段独一的了局集
selectidentity(int,1,1)asautoID,*into#TmpfromtableName
selectmin(autoID)asautoIDinto#Tmp2from#TmpgroupbyName,autoID
select*from#TmpwhereautoIDin(selectautoIDfrom#tmp2)
最初一个select即失掉了Name,Address不反复的了局集(但多了一个autoID字段,实践写时能够写在select子句中省往此列)



变动数据库中表的所属用户的两个办法
人人大概会常常碰着一个数据库备份复原到别的一台呆板了局招致一切的表都不克不及翻开了,缘故原由是建表的时分接纳了事先的数据库用户……


--变动某个表
execsp_changeobjectownertablename,dbo


--存储变动全体表
CREATEPROCEDUREdbo.User_ChangeObjectOwnerBatch
@OldOwnerasNVARCHAR(128),
@NewOwnerasNVARCHAR(128)
AS

DECLARE@NameasNVARCHAR(128)
DECLARE@OwnerasNVARCHAR(128)
DECLARE@OwnerNameasNVARCHAR(128)

DECLAREcurObjectCURSORFOR
selectName=name,
Owner=user_name(uid)
fromsysobjects
whereuser_name(uid)=@OldOwner
orderbyname

OPENcurObject
FETCHNEXTFROMcurObjectINTO@Name,@Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if@Owner=@OldOwner
begin
set@OwnerName=@OldOwner+.+rtrim(@Name)
execsp_changeobjectowner@OwnerName,@NewOwner
end
--select@name,@NewOwner,@OldOwner

FETCHNEXTFROMcurObjectINTO@Name,@Owner
END

closecurObject
deallocatecurObject


GO


SQLSERVER中间接轮回写进数据
没甚么好说的了,人人本人看,偶然候有点用途

declare@iint
set@i=1
while@i<30
begin
insertintotest(userid)values(@i)
set@i=@i+1
end



有数据库日记文件恢单数据库办法两则
数据库日记文件的误删或其余缘故原由引发数据库日记的破坏


办法一

1.新建一个同名的数据库

2.再停失落sqlserver(注重不要分别数据库)

3.用原数据库的数据文件掩盖失落这个新建的数据库

4.再重启sqlserver

5.此时翻开企业办理器时会呈现置疑,先不论,实行上面的语句(注重修正个中的数据库名)

6.完成后一样平常就能够会见数据库中的数据了,这时候,数据库自己一样平常还要成绩,办理举措是,使用
数据库的剧本创立一个新的数据库,并将数据导出来就好了.

USEMASTER
GO

SP_CONFIGUREALLOWUPDATES,1RECONFIGUREWITHOVERRIDE
GO

UPDATESYSDATABASESSETSTATUS=32768WHERENAME=置疑的数据库名
Go

sp_dboption置疑的数据库名,singleuser,true
Go

DBCCCHECKDB(置疑的数据库名)
Go

updatesysdatabasessetstatus=28wherename=置疑的数据库名
Go

sp_configureallowupdates,0reconfigurewithoverride
Go

sp_dboption置疑的数据库名,singleuser,false
Go

办法二

事变的原因
今天,体系办理员告知我,我们一个外部使用数据库地点的磁盘空间不敷了。我注重到数据库事务日记文件XXX_Data.ldf文件已增加到了3GB,因而我决意减少这个日记文件。经由压缩数据库等操纵未果后,我犯了一个自进进行业以来的最年夜最愚昧的毛病:居然误删除这个日记文件!厥后我看到一切论及数据库恢复的文章上都说道:“不管怎样都要包管数据库日记文件存在,它相当主要”,乃至微软乃至有一篇KB文章讲怎样只靠日记文件恢单数据库的。我真是不晓得我当时候是怎样想的?!

这下子坏了!这个数据库连不上了,企业办理器在它的中间写着“(置疑)”。并且最要命的,这个数据库历来没有备份了。我独一找失掉的是迁徙半年前的别的一个数据库服务器,使用却是能用了,可是少了很多纪录、表和存储历程。真但愿这只是一场恶梦!

没无效果的恢复步骤
附加数据库
_Rambo讲过被删除日记文件中不存在举动日记时,能够这么做来恢复:

1,分别被置疑的数据库,可使用sp_detach_db
2,附加数据库,可使用sp_attach_single_file_db

可是,很遗憾,实行以后,SQLServer质疑数据文件和日记文件不符,以是没法附加数据库数据文件。

DTS数据导出
不可,没法读取XXX数据库,DTSWizard呈报说“初始化高低文产生毛病”。

告急形式
怡红令郎讲过没有日记用于恢复时,能够这么做:

1,把数据库设置为emergencymode

2,从头创建一个log文件

3,把SQLServer从头启动一下

4,把使用数据库设置成单用户形式

5,做DBCCCHECKDB

6,假如没有甚么年夜成绩就能够把数据库形态改归去了,记得别忘了把体系表的修正选项关失落



我理论了一下,把使用数据库的数据文件移走,从头创建一个同名的数据库XXX,然后停失落SQL服务,把本来的数据文件再掩盖返来。以后,依照怡红令郎的步骤走。

可是,也很遗憾,除第2步以外,其他步骤实行十分乐成。惋惜,重启SQLServer以后,这个使用数据库仍旧是置疑!

不外,让我欣喜的是,这么做以后,却是可以Select数据了,让我年夜出一口吻。只不外,组件利用数据库时,呈报说:“产生毛病:-2147467259,未能在数据库XXX中运转BEGINTRANSACTION,由于该数据库处于躲避恢复形式。”



终极乐成恢复的全体步骤
设置数据库为告急形式
停失落SQLServer服务;

把使用数据库的数据文件XXX_Data.mdf移走;

从头创建一个同名的数据库XXX;

停失落SQL服务;

把本来的数据文件再掩盖返来;

运转以下语句,把该数据库设置为告急形式;

运转“UseMaster

Go

sp_configureallowupdates,1

reconfigurewithoverride

Go”

实行了局:

DBCC实行终了。假如DBCC输入了毛病信息,请与体系办理员接洽。

已将设置选项allowupdates从0改成1。请运转RECONFIGURE语句以安装。



接着运转“updatesysdatabasessetstatus=32768wherename=XXX”

实行了局:

(所影响的行数为1行)



重启SQLServer服务;

运转以下语句,把使用数据库设置为SingleUser形式;

运转“sp_dboptionXXX,singleuser,true”

实行了局:

命令已乐成完成。



ü做DBCCCHECKDB;

运转“DBCCCHECKDB(XXX)”

实行了局:

XXX的DBCC了局。

sysobjects的DBCC了局。

工具sysobjects有273行,这些行位于5页中。

sysindexes的DBCC了局。

工具sysindexes有202行,这些行位于7页中。

syscolumns的DBCC了局。

………



ü运转以下语句把体系表的修正选项关失落;

运转“sp_resetstatus"XXX"

go

sp_configureallowupdates,0

reconfigurewithoverride

Go”

实行了局:

在sysdatabases中更新数据库XXX的条目之前,形式=0,形态=28(形态suspect_bit=0),

没有更新sysdatabases中的任何行,由于已准确地重置了形式和形态。没有毛病,未举行任何变动。

DBCC实行终了。假如DBCC输入了毛病信息,请与体系办理员接洽。

已将设置选项allowupdates从1改成0。请运转RECONFIGURE语句以安装。



从头创建别的一个数据库XXX.Lost;

DTS导出导游
运转DTS导出导游;

复制源选择EmergencyMode的数据库XXX,导进到XXX.Lost;

选择“在SQLServer数据库之间复制工具和数据”,试了屡次,仿佛不可,只是复制过去了一切表布局,可是没无数据,也没有视图和存储历程,并且DTS导游最初呈报复制失利;

以是最初选择“从源数据库复制表和视图”,可是厥后发明,如许老是只能复制一部分表纪录;

因而选择“用一条查询指定要传输的数据”,缺哪一个表纪录,就导哪一个;

视图和存储历程是实行SQL语句增加的。



保护SqlServer中表的索引
在利用和创立数据库索引中常常会碰着一些成绩,在这里能够接纳一些另类的办法办理…

--第一步:检察是不是必要保护,检察扫描密度/ScanDensity是不是为100%
declare@table_idint
set@table_id=object_id(表名)
dbccshowcontig(@table_id)

--第二步:重构表索引
dbccdbreindex(表名,pk_索引名,100)

--重做第一步,如发明扫描密度/ScanDensity仍是小于100%则重构表的一切索引
--杨铮:其实不必定能达100%。
dbccdbreindex(表名,,100)


SQLServer补钉安装罕见成绩
谁碰着成绩就看看咯:)

1、补钉安装过程当中罕见成绩


假如在安装补钉的时分碰到以下相似毛病:

1、安装过程当中呈现“之前举行的程序创立了挂起的文件操纵,运转安装程序前,必需从头启动”,请依照上面步骤办理:

a、重启呆板,再举行安装,假如发明另有该毛病,请按上面步骤
b、在入手下手->运转中输出regedit
c、到HKEY_LOCAL_MACHINEYSTEMCurrentControlSetControlessionManager地位
d、选择文件->倒出,保留
e、在右侧窗口右击PendingFileRenameOperations,选择删除,然后确认
f、重启安装,成绩办理

假如另有一样成绩,请反省别的注册表中是不是有该值存在,若有请删失落。


2、在安装SQLServerSP3,偶然候会呈现:不管用windows认证仍是混和认证,都呈现暗码毛病的情形,这时候检察一时目次下的sqlsp.out,会发明以下形貌:
[TCP/IPSockets]SpecifiedSQLservernotfound.
[TCP/IPSockets]ConnectionOpen(Connect()).
实在这是SQLServerSP3的一个小bug,在安装sp3的时分,没有监听tcp/ip端口,能够依照以下步骤举行:

1、翻开SQLserver客户器收集有用工具和服务器收集工具,确保启用的协定中包括namepipe,而且地位在第一名.
2、确保[HKEY_LOCAL_MACHINEOFTWAREMicrosoftMSSQLServerClientConnectTo]
"DSQUERY"="DBNETLIB".
假如没有,请本人创建
3、中断mssql.
4、举行安装.

如许就能够举行准确安装了。

2、SQLServer补钉版本的反省

SQLServer的补钉版本反省不如Windows补钉版本反省间接,一个体系办理员,假如不懂得SQLServer版本对应的补钉号,大概也会碰到一点贫苦,因而在这申明一下,经由过程如许的举措辨别呆板是平安的举措,不会对体系发生任何影响。
1、用Isql大概SQL查询剖析器登录到SQLServer,假如是用Isql,请在cmd窗口输出isql-Usa,然后输出暗码,进进;假如是用SQL查询剖析器,请从程序中启动,输出sa和暗码(也能够用windows考证)。
2、在ISQL中输出:
Select@@Version;
go

大概SQL查询剖析器中输出(实在假如不想输出,只需翻开匡助的关于就能够了:))
Select@@Version;
然后按实行;
这时候会前往SQL的版本信息,以下:
MicrosoftSQLServer2000-8.00.760(IntelX86)Dec17200214:22:05Copyright(c)1988-2003MicrosoftCorporationEnterpriseEditiononWindowsNT5.0(Build2195:ServicePack3)
个中的8.00.760就是SQLServer的版本和补钉号。对应干系以下:

8.00.194-——————SQLServer2000RTM
8.00.384-——————(SP1)
8.00.534-——————(SP2)
8.00.760-——————(SP3)

如许我们就可以看到SQLServer的准确版本和补钉号了。

我们也能够用xp_msver看到更具体的信息

SqlServer数据库的备份和恢复措施
最经常使用的操纵,老手们看看……

1、备份数据库

1、翻开SQL企业办理器,在把持台根目次中顺次点开MicrosoftSQLServer
2、SQLServer组-->双击翻开你的服务器-->双击翻开数据库目次
3、选择你的数据库称号(如论坛数据库Forum)-->然后点下面菜单中的工具-->选择备份数据库
4、备份选项选择完整备份,目标中的备份到假如本来有路径和称号则选中称号点删除,然后点增加,假如本来没有路径和称号则间接选择增加,接着指定路径和文件名,指定后点断定前往备份窗口,接着点断定举行备份

2、复原数据库

1、翻开SQL企业办理器,在把持台根目次中顺次点开MicrosoftSQLServer
2、SQLServer组-->双击翻开你的服务器-->点图标栏的新建数据库图标,新建数据库的名字自行取
3、点击新建好的数据库称号(如论坛数据库Forum)-->然后点下面菜单中的工具-->选择恢单数据库
4、在弹出来的窗口中的复原选项当选择从设备-->点选择设备-->点增加-->然后选择你的备份文件名-->增加后点断定前往,这时候候设备栏应当呈现您方才选择的数据库备份文件名,备份号默许为1(假如您对统一个文件做过量次备份,能够点击备份号中间的检察内容,在复选框当选择最新的一次备份后点断定)-->然后点击上方惯例中间的选项按钮
5、在呈现的窗口当选择在现无数据库上强迫复原,和在恢复完成形态当选择使数据库能够持续运转但没法复原别的事件日记的选项。在窗口的两头部位的将数据库文件复原为这里要依照你SQL的安装举行设置(也能够指定本人的目次),逻辑文件名不必要修改,移至物理文件名要依据你所恢复的呆板情形做修改,如您的SQL数据库装在D:ProgramFilesMicrosoftSQLServerMSSQLData,那末就依照您恢复呆板的目次举行相干修改修改,而且最初的文件名最好改成您以后的数据库名(如本来是bbs_data.mdf,如今的数据库是forum,就改成forum_data.mdf),日记和数据文件都要依照如许的体例做相干的修改(日记的文件名是*_log.ldf开头的),这里的恢复目次您能够自在设置,条件是该目次必需存在(如您能够指定d:qldatabs_data.mdf大概d:qldatabs_log.ldf),不然恢复将报错
6、修正完成后,点击上面切实其实定举行恢复,这时候会呈现一个进度条,提醒恢复的进度,恢复完成后体系会主动提醒乐成,如两头提醒报错,请纪录下相干的毛病内容并扣问对SQL操纵对照熟习的职员,一样平常的毛病不过是目次毛病大概文件名反复大概文件名毛病大概空间不敷大概数据库正在利用中的毛病,数据库正在利用的毛病您能够实验封闭一切关于SQL窗口然后从头翻开举行恢复操纵,假如还提醒正在利用的毛病能够将SQL服务中断然后重起看看,至于上述别的的毛病一样平常都能依照毛病内容做响应修改后便可恢复

3、压缩数据库

一样平常情形下,SQL数据库的压缩其实不能很年夜水平上减小数据库巨细,其次要感化是压缩日记巨细,应该按期举行此操纵以避免数据库日记过年夜
1、设置数据库形式为复杂形式:翻开SQL企业办理器,在把持台根目次中顺次点开MicrosoftSQLServer-->SQLServer组-->双击翻开你的服务器-->双击翻开数据库目次-->选择你的数据库称号(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在妨碍复原的形式当选择“复杂”,然后按断定保留
2、在以后数据库上点右键,看一切义务中的压缩数据库,一样平常内里的默许设置不必调剂,间接点断定
3、压缩数据库完成后,倡议将您的数据库属性从头设置为尺度形式,操纵办法同第一点,由于日记在一些非常情形下常常是恢单数据库的主要根据

4、设定逐日主动备份数据库

激烈倡议有前提的用户举行此操纵!
1、翻开企业办理器,在把持台根目次中顺次点开MicrosoftSQLServer-->SQLServer组-->双击翻开你的服务器
2、然后点下面菜单中的工具-->选择数据库保护企图器
3、下一步选择要举行主动备份的数据-->下一步更新数据优化信息,这里一样平常不必做选择-->下一步反省数据完全性,也一样平常不选择
4、下一步指定命据库保护企图,默许的是1周备份一次,点击变动选择天天备份后点断定
5、下一步指定备份的磁盘目次,选择指定目次,如您能够在D盘新建一个目次如:d:databak,然后在这里选择利用此目次,假如您的数据库对照多最好选择为每一个数据库创建子目次,然后选择删除早于几天前的备份,一样平常设定4-7天,这看您的详细备份请求,备份文件扩大名一样平常都是bak就用默许的
6、下一步指定事件日记备份企图,看您的必要做选择-->下一步要天生的报表,一样平常不做选择-->下一步保护企图汗青纪录,最好用默许的选项-->下一步完成
7、完成后体系极可能会提醒SqlServerAgent服务未启动,先点断定完成企图设定,然后找到桌面最右侧形态栏中的SQL绿色图标,双击点开,在服务当选择SqlServerAgent,然后点击运转箭头,选高低方确当启动OS时主动启动服务
8、这个时分数据库企图已乐成的运转了,他将依照您下面的设置举行主动备份

修正企图:
1、翻开企业办理器,在把持台根目次中顺次点开MicrosoftSQLServer-->SQLServer组-->双击翻开你的服务器-->办理-->数据库保护企图-->翻开后可看到你设定的企图,能够举行修正大概删除操纵

5、数据的转移(新建数据库或转移服务器)

一样平常情形下,最好利用备份和复原操纵来举行转移数据,在特别情形下,能够用导进导出的体例举行转移,这里先容的就是导进导出体例,导进导出体例转移数据一个感化就是能够在压缩数据库有效的情形下用来减小(压缩)数据库的巨细,本操纵默许为您对SQL的操纵有必定的懂得,假如对个中的部分操纵不睬解,能够征询动网相干职员大概查询网上材料
1、将原数据库的一切表、存储历程导出成一个SQL文件,导出的时分注重在选项当选择编写索引剧本和编写主键、外键、默许值和反省束缚剧本选项
2、新建数据库,对新建数据库实行第一步中所创建的SQL文件
3、用SQL的导进导出体例,对新数据库导进原数据库中的一切表内容

使用数据库日记恢单数据到工夫点的操纵
因为不一般的数据丧失,而又不想利用备份数据复原,只需本来有备份且以后日记保留无缺,能够接纳这个办法尝尝,说不定可挽回丧失……

1,假如误操纵之前存在一个全库备份(或已有多个差别备份或增量备份),起首要做的事就是进
举行一第二天志备份(假如为了不让日记文件变年夜而置trunc.logonchkpt.选项为1那你就逝世翘了)
backuplogdbNametodisk=fileName
2,恢复一个全库备份,注重必要利用withnorecovery,假如另有其他差别或增量备份,则逐一恢

restoredatabasedbNamefromdisk=fileNamewithnorecovery
3,恢复最初一个日记备份即刚做的日记备份,指定恢复工夫点到误操纵之前的时候
restorelogdbNamefromdisk=fileName
withstopat=date_time

以上这些操纵都能够在SQLSERVER企业办理器里完成,难度不年夜。。。

固然,假如误操纵是一些不记日记的操纵好比truncatetable,selectinto等操纵,那末是没法利
用上述办法来恢单数据的...

SQLServer2000数据库文件破坏时怎样恢复
呈现如许的成绩是对照严峻的了,可否修复只能看你的命运……

SQLServer2000中,假如数据库文件(非体系数据库文件)碰到毛病的时分,仅合用于非master,msdb的数据库。

申明以下:

1建一个测试数据库test(数据库范例为完整)
2建一个表,拔出点纪录
createtablea(c1varchar(2))
go
insertintoavalues(aa)
go
insertintoavalues(bb)
go
3作完整备份,到文件test_1.bak
4在作一点修正
insertintoavalues(cc)
go
createtableb(c1int)
go
insertintobvalues(1)
go
insertintobvalues(2)
go
5shutdown数据库服务器
6用ultraedit编纂数据库文件test_data.mdf,任意修正点字节内容,相称于数据库遭到致命的破坏。
7启动数据库,而且运转企业办理器,点开数据库,看到test酿成灰色,并且显现置疑。
8运转isql-SLocalhost-Usa-P
1>backuplogtestTODISK=D:ProgramFilesMicrosoftSQLServerMSSQLBACKUP
est_2.bakWITHNO_TRUNCATE
2>go
已处置2页,这些页属于数据库test的文件TEST_Log(位于文件1上)。
BACKUPLOG操纵乐成地处置了2页,消费了0.111秒(0.087MB/秒)。

9举行恢复最老的完整备份
1>RESTOREDATABASEtestFROMDISK=D:ProgramFilesMicrosoftSQLServerMSSQL
BACKUPest_1.bakWITHNORECOVERY
2>go
已处置96页,这些页属于数据库test的文件TEST_Data(位于文件1上)。
已处置1页,这些页属于数据库test的文件TEST_Log(位于文件1上)。
RESTOREDATABASE操纵乐成地处置了97页,消费了0.107秒(7.368MB/秒)。

10恢复比来的日记
1>RESTORELOGtestFROMDISK=D:ProgramFilesMicrosoftSQLServerMSSQLBACKU
Pest_2.bakWITHRECOVERY
2>go
已处置2页,这些页属于数据库test的文件TEST_Log(位于文件1上)。
RESTORELOG操纵乐成地处置了2页,消费了0.056秒(0.173MB/秒)。





存储历程编写履历和优化措施
履历之谈,看看……

1、合适读者工具:数据库开辟程序员,数据库的数据量良多,触及到对SP(存储历程)的优化的项目开辟职员,对数据库有浓郁乐趣的人。 

  2、先容:在数据库的开辟过程当中,常常会碰到庞大的营业逻辑和对数据库的操纵,这个时分就会用SP来封装数据库操纵。假如项目标SP较多,誊写又没有必定的标准,将会影响今后的体系保护坚苦和年夜SP逻辑的难以了解,别的假如数据库的数据量年夜大概项目对SP的功能请求很,就会碰到优化的成绩,不然速率有大概很慢,经由亲自履历,一个经由优化过的SP要比一本性能差的SP的效力乃至高几百倍。 

  3、内容: 

  1、开辟职员假如用到其他库的Table或View,务必在以后库中创建View来完成跨库操纵,最好不要间接利用“databse.dbo.table_name”,由于sp_depends不克不及显现出该SP所利用的跨库table或view,不便利校验。  

  2、开辟职员在提交SP前,必需已利用setshowplanon剖析过查询企图,做过本身的查询优化反省。 

  3、高程序运转效力,优化使用程序,在SP编写过程当中应当注重以下几点:  

  a)SQL的利用标准:

   i. 只管制止年夜事件操纵,慎用holdlock子句,进步体系并发才能。

   ii. 只管制止重复会见统一张或几张表,特别是数据量较年夜的表,能够思索先依据前提提取数据光临时表中,然后再做毗连。

   iii. 只管制止利用游标,由于游标的效力较差,假如游标操纵的数据凌驾1万行,那末就应当改写;假如利用了游标,就要只管制止在游标轮回中再举行表毗连的操纵。

   iv. 注重where字句写法,必需思索语句按次,应当依据索引按次、局限巨细来断定前提子句的前后按次,尽量的让字段按次与索引按次相分歧,局限从年夜到小。

   v. 不要在where子句中的“=”右边举行函数、算术运算或其他表达式运算,不然体系将大概没法准确利用索引。

   vi. 只管利用exists取代selectcount(1)来判别是不是存在纪录,count函数只要在统计表中一切行数时利用,并且count(1)比count(*)更无效率。

   vii. 只管利用“>=”,不要利用“>”。

   viii. 注重一些or子句和union子句之间的交换

   ix. 注重表之间毗连的数据范例,制止分歧范例数据之间的毗连。

   x. 注重存储过程当中参数和数据范例的干系。

   xi. 注重insert、update操纵的数据量,避免与其他使用抵触。假如数据量凌驾200个数据页面(400k),那末体系将会举行锁晋级,页级锁会晋级成表级锁。  

  b)索引的利用标准:

   i. 索引的创立要与使用分离思索,倡议年夜的OLTP表不要凌驾6个索引。

   ii. 尽量的利用索引字段作为查询前提,特别是聚簇索引,需要时能够经由过程indexindex_name来强迫指定索引

   iii. 制止对年夜表查询时举行tablescan,需要时思索新建索引。

   iv. 在利用索引字段作为前提时,假如该索引是团结索引,那末必需利用到该索引中的第一个字段作为前提时才干包管体系利用该索引,不然该索引将不会被利用。

   v. 要注重索引的保护,周期性重修索引,从头编译存储历程。  

  c)tempdb的利用标准:

   i. 只管制止利用distinct、orderby、groupby、having、join、cumpute,由于这些语句会减轻tempdb的包袱。

   ii. 制止频仍创立和删除一时表,削减体系表资本的损耗。

   iii. 在新建一时表时,假如一次性拔出数据量很年夜,那末可使用selectinto取代createtable,制止log,进步速率;假如数据量不年夜,为了和缓体系表的资本,倡议先createtable,然后insert。

   iv. 假如一时表的数据量较年夜,必要创建索引,那末应当将创立一时表和创建索引的历程放在独自一个子存储过程当中,如许才干包管体系可以很好的利用到该一时表的索引。

   v. 假如利用到了一时表,在存储历程的最初务势必一切的一时表显式删除,先truncatetable,然后droptable,如许能够制止体系表的较长工夫锁定。

   vi. 慎用年夜的一时表与其他年夜表的毗连查询和修正,减低体系表包袱,由于这类操纵会在一条语句中屡次利用tempdb的体系表。  

  d)公道的算法利用:  

  依据下面已提到的SQL优化手艺和ASETuning手册中的SQL优化内容,分离实践使用,接纳多种算法举行对照,以取得损耗资本起码、效力最高的办法。详细可用ASE调优命令:setstatisticsioon,setstatisticstimeon,setshowplanon等

使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性
爱飞 该用户已被删除
沙发
发表于 2015-1-19 16:29:42 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
冷月葬花魂 该用户已被删除
板凳
发表于 2015-1-25 18:00:54 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
莫相离 该用户已被删除
地板
发表于 2015-2-3 12:25:09 | 只看该作者
大家注意一点。如下面的例子:
蒙在股里 该用户已被删除
5#
发表于 2015-2-26 13:04:23 | 只看该作者
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
第二个灵魂 该用户已被删除
6#
发表于 2015-3-8 15:22:03 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
活着的死人 该用户已被删除
7#
发表于 2015-3-16 03:10:06 | 只看该作者
总感觉自己还是不会SQL
简单生活 该用户已被删除
8#
发表于 2015-3-22 19:11:00 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 02:59

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表