经验技巧:分享两条Delphi开发经验 |
近期在做“数据库切割工具”时,碰到了一些棘手的问题,经过多方打探、查找,最终得以解决,现总结下来,给大家共享,免的大家以后在碰到类似问题时再耗费大量时间去查找、去打探! 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,相对于庞大的数据文件而言,微之戡微. |
相关推荐
CurlPas与TidyPas开源库详解与实战应用
在Delphi开发环境中,CurlPas与TidyPas是两个极具实用价值的开源库,分别用于网络通信与HTML内容处理。CurlPas是对著名网络库LibCURL的Delphi语言封装,支持HTTP、HTTPS、FTP等多种协议,适用于构建高性能的网络请求模块。TidyPas则基于HTML Tidy库开发,专注于HTML文档的解析、清理与格式化,尤其擅长处理不规范或破损的HTML内容。
CURLget|post请求封装
调用微信公众平台接口 需要用到CURL(相当于ajax) 访问接口返回数据 页面不刷新 此文件封装了调用curl执行get|post请求 返回相应的数据
支持HTTPS的Get和Post函数
自己用底层的WinINet.dll写的一些函数,可通过HTTPS协议POST数据,分享一下
使用curl的简单实例
a) 使用vs新建一个win32的控制台程序。 b) 在工程目录下,新建一个include的文件夹,将libcurl-7.18.0-win32-msvc/include/curl这个目录拷贝到include目录下。 c) 项目―――〉属性―――〉C/C++―――〉常规―――〉附加包含目录 添加 ./include/ d)
delphi 调用编码格式为application/x-www-form-urlencoded
delphi application/x-www-form-urlencoded
经验技巧:分享两条Delphi开发经验
近期在做“数据库切割工具”时,碰到了一些棘手的问题,经过多方打探、查找,最终得以解决,现总结下来,给大家共享,免的大家以后在碰到类似问题时再耗费大量时间去查找、去打探! 1、判断输入的路径在服务器上是否存在: 例如,要在客户端执行一个创建数据库的程序,数据库要在服务器上创建,但路径可以手工输入,这时就面临一个判断自已现在输入的路径在服务器上是否存在的问题,免得在执行Create Dat
Delphi开发Linux的三个操作系统内核单元之网络传输运行时刻库Linuxapi.Curl.pas
Delphi开发Linux的三个操作系统内核单元之网络传输运行时刻库Linuxapi.Curl.pas ......不断补充中...... 一、网络传输运行时刻库Linuxapi.Curl.pas Delphi开发Linux在使用CURL时的建议的作为暂存区的缓冲区大小CURL_MAX_WRITE_SIZE: //uses Linuxapi.Curl.pas; const CURL_MAX_WRITE_SIZE = 16384; {$EXTERNALSYM CU...
大文件分块上传的代码,C++转delphi,由delphi实现。
在 Delphi 中,我们通常使用。等组件来处理 HTTP 请求。
自己编译的curl库
1 有些时候,我们需要自己编译libcurl库。 默认curl是不支持ssl的,需要自己勾选,并配置对应ssl代码。 一般编译都需要支持ssl,大多选择openssl开源库。 可自行编译。编译的时候,最好勾选testing选项,来编译测试文件,这样编译研究各种测试用例。 今天编译的版本,集成到应用中,debug版本正常,release版本程序直接进程关闭(无异常[崩溃])。 勾选 E...
UrlDownloadToFile的进度提示
Delphi编写下载程序:UrlDownloadToFile的进度提示 urlmon.dll中有一个用于下载的API,MSDN中的定义如下: HRESULT URLDownloadToFile( LPUNKNOWN pCaller, LPCTSTR szURL, LPCTSTR szFileName, DWORD dwReserved, LPBINDSTATUSCALLBACK lpfnCB ); Delphi的UrlMon....
快速学习-RestFul实战
三、RestFul实战 1、TP框架中的资源路由 手册-路由-资源路由、手册-控制器-资源控制器 ①创建api模块 php think build --module api ②创建news控制器 php think make:controller api/News ③设置路由(application/route.php) \think\Route::resource('news','api/n...
服务器请求接口CURL方法封装
<?php /** */ namespace App\Utils; use Illuminate\Support\Facades\Config; class RPC { /** * @param $url 请求网址 * @param bool $params 请求参数 * @param int $ispost 请求方式 * @param int $ht...
很好很强大的cUrl库
<br />貌似以前使用过cUrl,不过没读过源码,记得以前到是看过wGet的源码,不过那个程序是单线程的。这次无意中发现cUrl的源码居然有Windows版的,到http://curl.haxx.se/下了个最新版的源码下来,源码是用VC6编译的,我在VS2005下重新进行编译,居然只有一个警告。<br /> <br />cUrl的实现代码是放在动态库中,将动态库以静态方式编译生成libcurl.lib,然后将cUrl源码目录下的“include/curl”文件夹复制到自己的项目下(如图1)。<br />
Delphi调用Http接口方法
uses IdHTTP; var HttpClient: TIdHttp; ParamList: TStringList; SS: TStringStream; begin SS := TStringStream.Create('', TEncoding.UTF8); HttpClient := TIdHttp.Create(); ParamList :
使用libcurl步骤1之curl_global_init
文章采集自互联网,仅做学习笔记使用 curl_global_init - 全局libcurl初始化 名称 curl_global_init - 全局libcurl初始化 概要 #include <curl / curl.h> CURLcode curl_global_init(长旗); 描述 此函数设置libcurl需要的程序环境。可以把它想象成库加载器的扩展。...
C++ 用libcurl库进行http通讯网络编程
转自 http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一、LibCurl基本编程框架 二、一些基本的函数 三、curl_easy_setopt函数部分选项介绍 四、curl_easy_perform 函数说明(error 状态码) 五、libcurl使用的HTTP消息头 六、获
Java开源在线考试系统怎么选?从技术选型到落地部署的完整指南
Java开源在线考试系统怎么选?本文从技术选型、核心功能、部署运维、二次开发等维度,梳理了Java开源在线考试系统的选型要点。
常用办公自动化设备使用与维护用教材课件汇总完整版ppt全套课件最全教学教程整本书电子教案全书教案课件.ppt
常用办公自动化设备使用与维护用教材课件汇总完整版ppt全套课件最全教学教程整本书电子教案全书教案课件.ppt
804




被折叠的 条评论
为什么被折叠?



