关于远程备份sql数据库 ( 积分: 50 )

  • 主题发起人 主题发起人 guorui7832
  • 开始时间 开始时间
G

guorui7832

Unregistered / Unconfirmed
GUEST, unregistred user!
请教一个问题:
  现有两台机器,一台机器(1)中安装了sql数据库服务器,有sql数据库信息,在另一台机器(2)中运行delphi开发备份程序,将机器(1)中的sql数据库信息备份到机器(2)中代码如何实现?
  我写了一段代码,是在机器(1)中运行能够备份保存,在机器(2)中运行程序后,备份数据放到(1)中了。可以需要改进一下,请教各位!!代码如下:
procedure Tdsjbff1.FormCreate(Sender: TObject);
var kpath,kdir:string;
begin
Icmp.Host:=192.168.1.2'; //判断网络是否正常
Icmp.ReceiveTimeout:=6000;
Icmp.Port:=1433;
Icmp.Ping();
if Icmp.ReplyStatus.BytesReceived > 0 then
try
begin
mm_cnt:='Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=ppxt;Data Source=192.168.1.2';
ADOConnection1.ConnectionString:=mm_cnt;
ADOConnection1.Connected:=true;
ADOConnection1.KeepConnection:=true;
with Query1 do
begin
close;
sql.Clear;
sql.Add('select getdate() as getdate ') ;
open;
kpath:='C:/数据备份';
if not DirectoryExists(kpath) then MkDir(kpath);

kdir:=kpath+'/'+formatdatetime('yyyymmdd',fieldbyname('getdate').AsDateTime-60)+'.back';
if FileExists(kdir) then DeleteFile(kdir);

kdir:=kpath+'/'+formatdatetime('yyyymmdd',fieldbyname('getdate').AsDateTime)+'.back';
if FileExists(kdir) then DeleteFile(kdir);
Close;
SQL.Clear;
SQL.Add('backup database ddxt to disk='''+kdir+'''');
ExecSQL;
end;
ShowMessage('备份成功!');
Application.Terminate;
end;
except
begin
showmessage('网络连接出现问题,数据没有备份?');
Application.Terminate;
end;
end
else
begin
showmessage('网络连接出现问题,数据没有备份?');
Application.Terminate;
end;
end;
 
请教一个问题:
  现有两台机器,一台机器(1)中安装了sql数据库服务器,有sql数据库信息,在另一台机器(2)中运行delphi开发备份程序,将机器(1)中的sql数据库信息备份到机器(2)中代码如何实现?
  我写了一段代码,是在机器(1)中运行能够备份保存,在机器(2)中运行程序后,备份数据放到(1)中了。可以需要改进一下,请教各位!!代码如下:
procedure Tdsjbff1.FormCreate(Sender: TObject);
var kpath,kdir:string;
begin
Icmp.Host:=192.168.1.2'; //判断网络是否正常
Icmp.ReceiveTimeout:=6000;
Icmp.Port:=1433;
Icmp.Ping();
if Icmp.ReplyStatus.BytesReceived > 0 then
try
begin
mm_cnt:='Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=ppxt;Data Source=192.168.1.2';
ADOConnection1.ConnectionString:=mm_cnt;
ADOConnection1.Connected:=true;
ADOConnection1.KeepConnection:=true;
with Query1 do
begin
close;
sql.Clear;
sql.Add('select getdate() as getdate ') ;
open;
kpath:='C:/数据备份';
if not DirectoryExists(kpath) then MkDir(kpath);

kdir:=kpath+'/'+formatdatetime('yyyymmdd',fieldbyname('getdate').AsDateTime-60)+'.back';
if FileExists(kdir) then DeleteFile(kdir);

kdir:=kpath+'/'+formatdatetime('yyyymmdd',fieldbyname('getdate').AsDateTime)+'.back';
if FileExists(kdir) then DeleteFile(kdir);
Close;
SQL.Clear;
SQL.Add('backup database ddxt to disk='''+kdir+'''');
ExecSQL;
end;
ShowMessage('备份成功!');
Application.Terminate;
end;
except
begin
showmessage('网络连接出现问题,数据没有备份?');
Application.Terminate;
end;
end
else
begin
showmessage('网络连接出现问题,数据没有备份?');
Application.Terminate;
end;
end;
 
backup database ddxt to disk='//192.168.1.98/temp/aa'
这样的方法试试.temp共享文件夹一定要设成完全共享.
 
哦,机器(1)的地址是192.168.1.2,我写的代码程序在机器(2)中运行,而且你这样写代码,在机器(2)中运行的程序访问机器(1)时,不用访问权限吗?我试试。
 
发错了。因是:
机器(1)的地址是192.168.1.2,我写的代码程序在机器(2)中运行,而且你这样写代码,在机器(1)sql服务器中运行sql语句,运行程序时访问机器(2)时,机器(2)做为保存数据的目的地址,也就是机器(1)向机器(2)中发送数据,不用访问权限吗?我试试。
 
czcn的方法很好,你也可以在机器1上对机器2的某个目录建立网络映射.
 
高手来啊 我也想字段 这个问题怎么解决
[:D]
 
对czcn所说的方法,我试验了,没有成功呀,不能找到正确的路径。
 
可以在服务器上建个FTP,客户端去下载就行了,INDY控件组里有FTP客户锻的组件
 
chen_liang,你说的我没有用过,可以详细说明一下吗?
 
czcn的方法是可行了,出错的原因是可能SQL Server没有权限访问该共享目录!windows能访问该路径不能代表SQL Server能访问该路径,因为SQL Server是由一个特定的windows帐号启动的,一般的的话,我会将数据库备份在本地,然后在SQL Server job里写代码将此文件拷贝到远程路径
--建立可访问连接,用adninistrator确保拥有所有权限
net use //192.168.1.2/D$/temp/backup/ passsword /user:domain/administrator
Go
backup database ddxt to disk='d:/backup/ddxt.bak'
excecute master..xp_cmdshell 'copy d:/backup/ddxt.bak //192.168.1.2/temp/backup/'
Go
这些可以写在SQL Server的job里,定期运行!
 
yitang说的对,我也写过一个但发现只能在服务器上成功备份,查来查去发现是访问权限的问题
 
谢谢各位我的问题解决了。我是通过二级备份处理成功的。
 
我见过别人是备份后用arj直接压到指定的机器上
 
为什么我只能看得到提问和回答人的姓名,但看不到内容呀!!!!
 
后退
顶部