包括安装时提示有挂起的操作、收缩数据库、压缩数据库、转移数据库给新用户以已存在用户权限、检查备份集、修复数据库等 K-F<X85m :zH`@!h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"sE
1,如果误操作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进 15>C|cS
进行一次日志备份(如果为了不让日志文件变大而置trunc. log on chkpt.选项为1那你就死翘了) 1Wob"Lm[N
backup log dbName to disk='fileName' b.]fSR:sx
2,恢复一个全库备份,注意需要使用with norecovery,如果还有其他差异或增量备份,则逐个恢 9|<97Hhk
复 8Igfr,
restore database dbName from disk='fileName' with norecovery Kpm8&#JDD
3,恢复最后一个日志备份即刚做的日志备份,指定恢复时间点到误操作之前的时刻 )\^<wIJJV
restore log dbName from disk='fileName' '\ -0a@
with stopat='date_time' 5RHF.F:L
8%YO`i[
以上这些操作都可以在SQL SERVER企业管理器里完成,难度不大。。。 ~a~9rDT_e
h$g8v${
当然,如果误操作是一些不记日志的操作比如truncate table,select into等操作,那么是无法利 e|DnCyz)
用上述方法来恢复数据的... n_B\\d'i;!
. o?%zX+
SQL Server2000数据库文件损坏时如何恢复 K-Dp_$F#q
出现这样的问题是比较严重的了,能否修复只能看你的运气…… R <m]cp6
1.o;:^ ~J
SQL Server2000中,如果数据库文件(非系统数据库文件)遇到错误的时候,仅适用于非master,msdb的数据库。 nU*m+FK\!e
tfag>B8
说明如下: < V57" }
g^xJ)]:Ws
1 建一个测试数据库test(数据库类型为完全) x~63Ks
2 建一个表,插入点记录 aMET yl
create table a(c1 varchar(2)) =D@>wb
go /8p>6Ox
insert into a values('aa') ,X@6fEZRd
go ohtLUZNb
insert into a values('bb') aY$;i&^
go qC(F-\Z4j
3 作完全备份,到文件test_1.bak vwq mXn
4 在作一点修改 h~O9$$8\y
insert into a values('cc') #`Q`j?n!'{
go Q}{~ ~_^
create table b(c1 int) v:/]uj
go dvF]o
insert into b values(1) '%PO-:T
go lf[~g
insert into b values(2) xD/ W7P
go /7sTA1J
5 shutdown 数据库服务器 i['@?5N
6 用ultraedit编辑数据库文件test_data.mdf,随便修改点字节内容,相当于数据库遭到致命的损坏。 @Ztk$RS
7 启动数据库,并且运行企业管理器,点开数据库,看到test变成灰色,而且显示置疑。 W+i4 @R&
8 运行isql -SLocalhost -Usa -P */ Ah<F($
1> backup log test TO DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKUP iN=4< #
est_2.bak' WITH NO_TRUNCATE kw{eK%u.k
2>go #j4_}MK
已处理 2 页,这些页属于数据库 'test' 的文件 'TEST_Log'(位于文件 1 上)。 X_ f["
BACKUP LOG 操作成功地处理了 2 页,花费了 0.111 秒(0.087 MB/秒)。 Alak l }
Pc(,U%l
9 进行恢复最老的完全备份 e,#0n^o8
1> RESTORE DATABASE test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQL \t;{'B~P
BACKUP est_1.bak' WITH NORECOVERY =YMw
2> go /8%I?/V W%
已处理 96 页,这些页属于数据库 'test' 的文件 'TEST_Data'(位于文件 1 上)。 `/<7p9Qy
已处理 1 页,这些页属于数据库 'test' 的文件 'TEST_Log'(位于文件 1 上)。 n*5}
RESTORE DATABASE 操作成功地处理了 97 页,花费了 0.107 秒(7.368 MB/秒)。 x!N+2b*y"G
:0&x;{v{
10 恢复最近的日志 ^`Nh=,uh
1> RESTORE LOG test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKU #vJ1QW^*
P est_2.bak' WITH RECOVERY z~VqC2>@
2> go X|L30/3G
已处理 2 页,这些页属于数据库 'test' 的文件 'TEST_Log'(位于文件 1 上)。 !YpU$I*
RESTORE LOG 操作成功地处理了 2 页,花费了 0.056 秒(0.173 MB/秒)。 EJX<%"/o>
Nbk7$[g2~
vVCNmn
15.存储过程编写经验和优化措施 "7p |
jG9n.i}jK
<P+(1cQ
一、适合读者对象:数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人。 @S|-@)f/
NX qwH0
二、介绍:在数据库的开发过程中,经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作。如果项目的SP较多,书写又没有一定的规范,将会影响以后的系统维护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,就会遇到优化的问题,否则速度有可能很慢,经过亲身经验,一个经过优化过的SP要比一个性能差的SP的效率甚至高几百倍。 HB-]|#j5
&s{`g/o1xX
三、内容: Ve7!#$a
2DyE#@,;
1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。 "^m./YS!?
XbQOz#o
2、开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。 v35Vn{~
`"=O2&
3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点: =5aeU}2
D~xV zOZD
a)SQL的使用规范: 4n6 2&D)1
-M|!dh|
i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。 -}p3}WrA
EN Pz6
ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。 l}X<Kzmi
F],Ti$ O
iii. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。 &SP '|0{ 0
'^{@W$*jE
iv. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。 )z#1`
{AhT* jM"[
v. 不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。 7M&enPS
srtvXx(vh
vi. 尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。 b"+?e [l
c0s?l7H%&u
vii. 尽量使用“>=”,不要使用“>”。 kn-&=0kx
Z|=uqPDq
viii. 注意一些or子句和union子句之间的替换 >x;,DkyW
et3,NC
ix. 注意表之间连接的数据类型,避免不同类型数据之间的连接。 bhbjh"SM
t:+qU3ft
x. 注意存储过程中参数和数据类型的关系。 A:rj6qVE|[
^ihj!*6<~)
xi. 注意insert、update操作的数据量,防止与其他应用冲突。如果数据量超过200个数据页面(400k),那么系统将会进行锁升级,页级锁会升级成表级锁。 "Ksi#>,Ku
L0W60xf|