科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SQL Server 数据库操作技巧锦集(6)

SQL Server 数据库操作技巧锦集(6)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

包括安装时提示有挂起的操作、收缩数据库、压缩数据库、转移数据库给新用户以已存在用户权限、检查备份集、修复数据库等 K-F<X85m :zH`@!h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"sE

作者:赛迪网技术社区 来源:赛迪网技术社区 2007年9月2日

关键字: 技巧 SQL Server SQL Server 各版本 数据库

  • 评论
  • 分享微博
  • 分享邮件
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|
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章