朱金灿
最近用VC做了一个程序,需要调用常用数据库系统的备份和恢复功能。下面谈谈我这方面的体会。
Kingbase的备份和恢复工具(我指的是命令行工具)做得实在不好。开始看了帮助文档我觉得备份命令还是很清晰的,但用起来就不是那么回事了。下面我用例子来说明:
打开开始菜单的运行对话框,输入Kingbase的备份命令行:
sys_dump.exe -h 168.168.168.59 -p 54321 -U SYSTEM -W 828707 -f E:\dumpfile.dmp TEST
单击确定后出现一个警告对话框:Windows找不到sys_dump.exe,请确定文件名是否正确......
正确的应是在运行对话框输入:
"C:\program file\Basesoft\KingbaseES\4.1\bin\sys_dump.exe" -h 168.168.168.59 -p 54321 -U SYSTEM -W 828707 -f E:\dumpfile.dmp TEST
在运行对话框输入“cmd”打开命令提示符界面,输入sys_dump.exe -h 168.168.168.59 -p 54321 -U SYSTEM -W 828707 -f E:\dumpfile.dmp TEST
也是说sys_dump.exe不是可执行文件,必须输入命令:
"C:\program file\Basesoft\KingbaseES\4.1\bin\sys_dump.exe" -h 168.168.168.59 -p 54321 -U SYSTEM -W 828707 -f E:\dumpfile.dmp TEST
如果用户单单是运行这样的命令进行备份,也没什么,不就多加一个路径吗?多输入几个字符而已。可是对于开发Kingbase应用程序的程序员来说,情况就不一样了。比如我用VC开发一个程序调用Kingbase的备份功能:
CString strCmdLine;
strCmdLine.Format("\"C:\\Program File\\Basesoft\\KingbaseES\\4.1\\bin\\sys_dump\" -h 168.168.168.59 -p 54321 -U SYSTEM -W 828707 -f E:\dumpfile.dmp TEST");
::CreatProcess(NULL,
(LPSTR)(LPCTSTR)strCmdLine,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi
);
但是这样的命令行无疑有很大的局限性的。如果用户没有把Kingbase装在C:\Program File里,那我的应用程序岂不是成了废物?难道我还有开发一个文件查找模块,把sys_dump的路径找出来?这无疑大大限制了应用程序的通用性。这算不算Kingbase的缺陷呢。我用的是KingbaseES4.1,操作系统是Windows XP sp2.
在这方面MySQL做的稍微好一点。在运行对话框输入mysqldump --host=168.168.168.59 --user=root --password=828707 student>E:\114.dmp
一个控制台界面一闪而过,但是并不能备份成功,但也没有出现一个错误提示框说Windows没有找到mysqldump.那么如何使用命令行备份mysql数据库呢?先在运行对话框输入"cmd"打开命令提示符:然后输入命令:mysqldump --host=168.168.168.59 --user=root --password=828707 student>E:\114.dmp,回车后就可以备份成功了。
因此通过应用程序调用MySQL的备份功能就要费一番周折了。
CString strCmdLine;
strCmdLine.Format("cmd.exe \k \"mysqldump --host=168.168.168.59 --user=root --password=828707 student>E:\114.dmp\"");
::CreatProcess(NULL,
(LPSTR)(LPCTSTR)strCmdLine,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi
);
我使用的是MySQL Administrator V1.1, MySQL Query Browser V1.1, MySQL Server V5.0,操作系统是Windows XP sp2.
在这方面做得最好的是Oracle数据库。直接在运行对话框输入:
EXP system/828707@stu full=y inctype=complete file=E:\stu.dmp
单击确定。ok,备份成功。
这样通过应用程序调用ORACLE的备份功能就简单多了。
CString strCmdLine;
strCmdLine.Format("EXP system/828707@stu full=y inctype=complete file=E:\stu.dmp");
::CreatProcess(NULL,
(LPSTR)(LPCTSTR)strCmdLine,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi
);
使用环境:OraDb10g,OraClient10g,操作系统是Windows XP sp2.
在我看来,dos界面的程序存在的必要性在于应用程序是否可以方面调用他们。一般用户应该不会放弃使用图形界面去学习使用什么命令行。如果这些dos界面的程序不能满足开发的需要,那它们还有存在的必要性吗?
评论