经验技巧:分享两条Delphi开发经验-Delphi-优质IT资源分享社区

yutingzhidong
总版主
总版主
  • UID2
  • 粉丝22
  • 关注1
  • 发帖数11
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:292回复:0

经验技巧:分享两条Delphi开发经验

楼主#
更多 发布于:2016-06-14 11:58

近期在做“数据库切开工具”时,碰到了一些扎手的疑问,通过多方刺探、查找,终究得以处理,现总结下来,给咱们同享,免的咱们今后在碰到类似疑问时再耗费很多时刻去查找、去刺探!
1、判别输入的途径在服务器上是不是存在:
例如,要在客户端履行一个创立数据库的程序,数据库要在服务器上创立,但途径能够手艺输入,这时就面对一个判别自已现在输入的途径在服务器上是不是存在的疑问,免得在履行Create
Database SQL时才报错:找不到途径。
具体办法如下:
exec master..xp_cmdshell 'dir E:\DATA'
,在查询剖析器中履行此段SQL,假如存在此途径,会输出此途径下的一切文件与文件夹信息,还有此盘的可用字节数与已此文件夹的字节数(图1所示);假如此途径不存在,则输出信息如图2所示,提示“找不到文件”。
可是,当途径中含有空格时,如C:\Program Files,直接用exec master..xp_cmdshell 'dir C:\Program
Files',体系回来成果会如跟图2显现相同,咱们需求做额定处理,才干得到准确的回来成果:
(1)exec master..xp_cmdshell 'dir "C:\Program Files\Microsoft SQL
Server\MSSQL"'
这种写法,在查询剖析器中直接履行是没有疑问的,也能回来准确成果,但假如放到程序中履行:
SQL.Add('exec master..xp_cmdshell ''dir "C:\Program Files\Microsoft SQL
Server\MSSQL"''),Open时就会报错,不能履行。
为何呢???
(2)咱们接下来查看SQL联机帮助,对XP_CMDSHELL的描绘如下:
xp_cmdshell {'command_string'} [, no_output]
参数
'command_string'
是在操作体系指令行解说器上履行的指令字符串。command_string 的数据类型为 varchar(255) 或
nvarchar(4000),没有默认值。command_string 不能包括一对以 上的双引号。假如由 command_string
引证的文件途径或程序称号中有空格,则需求运用一对引号。假如运用嵌入空格不方便,可考虑运用 FAT 8.3 文件名作为处理办 法。
no_output
是可选参数,表明履行给定的 command_string,但不向客户端回来任何输出。
帮助文件提示咱们要用一对引号将文件途径或许程序称号包起来,将全部途径包不起来不会报错,那我就将带有空格的单步途径包起来试试,看看行不行,履行
如下SQL:SQL.Add('exec master..xp_cmdshell ''dir C:\"Program Files"\"Microsoft SQL
Server"\MSSQL''),这么Open时果然不报错了,看来查询剖析器的语法查看与咱们的Query自己的语法查看仍是有必定差异的,不能同等的。因而,碰到途径中带空格的状况,准确的写法仍是:
exec master..xp_cmdshell 'dir C:\"Program Files"\"Microsoft SQL
Server"\MSSQL'
这一起阐明SQL帮助文件中的绿色字体部分 command_string 不能包括一对以上的双引号 的描绘是不准确的,看来SQL
Server帮助文件与商品也呈现了“标准与程序不相符”的疑问了,呵呵......
2、清空数据库的日志文件
疑问的引出:咱们的切开过程即是将单据数据中某个日期曾经的数据先仿制到新的数据库中(select ... into
...),然后再将本来数据库中的这些数据删去,这么操作在数量量很大的数据库上时,其日志文件的增加也是惊人的:我仿制一个48万条记载的表时,最终发现仅这一个表的操作就使新数据库的日志文件增加了170MB,假如不加清理,那就会被日志文件占用很多宝贵的磁盘空间。何况,咱们搬运到的新建数据库的效果也仅仅用来查询,今后不会有任何Insert、Update、Delete操作的,要这些日志文件没有什么用途,因而必须在向它搬运数据的过程中做一些减小日志文件的处理,怎么办??疑问由此而生...
(1)处理过程中不记载日志
设置办法如下:公司管理器中翻开对应数据库的“特点”,页框“选项”中将“模型”改为“简单”。这么设置的成果是对此数据库的任何操作都将不记载业务日志。对应的SQL为:EXEC
sp_dboption @pdbName, 'trunc. log on chkpt.', 'TRUE'
可是,咱们通过测验发现:启用此功能后,咱们在对这个数据库操作时,就不能用业务操作了,程序履行到BeginTranSaction时就报错,不能履行下去,由于咱们不能在对此库的操作中确保100%的准确性,因而咱们还需求业务,因而这种办法适用空间有限,也不能满足咱们程序的需求。
咱们还得持续查找.....
(2)处理过程中允许记载日志,但要对日志文件进行处理,时时减小它。
SQL Server的联机帮助通知咱们:
在下列状况下,日志文件的物理巨细将削减:
履行 DBCC SHRINKDATABASE 句子时。
履行引证日志文件的 DBCC SHRINKFILE 句子时。
主动缩短操作发作时。
下面咱们逐一剖析这三个计划:
① DBCC
SHRINKDATABASE:缩短特定数据库的一切数据和日志文件,包括咱们的需求,但也大于咱们的需求,此计划可用,但不要着急,给人的感受是买了一件能穿的衣服,但尺度大了些,穿在身上有点不舒服,咱们接着剖析以下两个计划...
② DBCC SHRINKFILE:
缩短有关数据库的指定数据文件或日志文件巨细。与计划1的差异仅一字之差:“和”与“或”,相当于把计划1拆成两步来履行,咱们需求的即是缩短日志文件,因而,它对咱们来说显得比照适宜,有点因地制宜的感受。但还有没有非常好的呢,咱们来看第三个计划...
③主动缩短:数据库也可设置为按给定的时刻距离主动缩短,服务器定期查看每个数据库中的空间运用状况。假如发现数据库中有很多搁置空间,并且它的
autoshrink 选项设置为 true,SQL Server 就减小该数据库中的文件巨细。它是周期性的履行DBCC
SHRINKDATABASE,已然计划1现已是一件尺度大了一些的衣服,则此计划就相当于又穿上了N件大尺度衣服,一件就现已够了,我还要那么多干嘛呢??
归纳比照发现,计划2正是咱们需求的。
DBCC SHRINKFILE ('+Trim(edDBMC.Text)+'_Log, TRUNCATEONLY)
通过这个句子处理今后,日志文件将回到它的最小状况504KB,任何的日志记载都将清空。
再联系咱们的工具,仿制完一个表之后,咱们就履行计划2,处理过程中日志文件暂时占用的最大空间也即是处理最大数据表时发生的日志空间,但最终都将清空,显现为500多KB,相对于巨大的数据文件而言,微之戡微.








优质IT资源分享社区为你提供此文。
本站有大量优质Delphi教程视频,资料等资源,包含Delphi基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。
Delphi教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

微信小程序开发

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客