求一SQL数据库备份语句(50分)

  • 主题发起人 主题发起人 mo
  • 开始时间 开始时间
M

mo

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个数据库(sql server2000 )名为:mydata
现想采用完整备份及增量备份两种方式,
1.使用管理工具备份数据库时(SQL SERVER是中文版的),
若选了调度却怎么也不能成功执行备份,是不是我的SQL SERVER有问题?
2.若采用SQL编程控制,怎么写?
比如: (备份到硬盘)
A.我要创建完整一个备份,要求每周二,18:30:00 的时候自动执行,SQL语句怎么写?
B.我要创建一个增量备份,要求每天17:40:00 的时候自动执行,SQL语句怎么写?
还有数据库恢复时,要指定是那种备份方式什么时候的备份,用SQL语句怎么写?

谢谢各位! (若分不够可以再加)





 
怎么没人答了?
 
主要是空制“自动执行”不知怎么写

大侠们,帮我啊
 
建立作业了
 
1.SQL SERVER自动备份没有问题,我在很多客户那里都用了。检查你的MAINTENANCE PLAN
,还要启动SQL AGENT(98下不能自动启动)
2。看SQL SERVER BOOK ONLINE ,里面有详细的说明。
BACKUP DATABASE TO DISK='DRIVE:/DIR/FILE.NAME'等
要想程序自动备份,需要程序处于服务状态。
 
TO:xxhadsg & ALL
SQL SERVER, SQL Server Agent 我都是运行了的;
1.使用管理工具备份数据库时是可以建立调度的了,但在没发生调度备份前不知在哪可以查出来我是否建立了调度
(或者说么样才能查看得到我建立的备份是含有”调度”的呢?)
2. SQL语句写的话,这“调度“该如果表示(设每天的18:00:00就执行备份)
3. 怎么用SQL编程得到最后一次的完全备份,和最后一次的增加备份?以便用它们来还原数据库

谢谢!(小弟是新手请多多指点)

 
function BackupDataBase01(mydatabase,SerVerName,dBaseName,UserName,temppassword,Bf_Filename:string):Boolean;
{_______________________________________________________________________
| mydatabase:数据模块名(Tdatabase) |
| ServerName:sqlserver服务器名 |
| dBaseName:数据库名 |
| UserName:用户名,需人MASTER数据库的操作权限 |
| temppassword:口令 |
| Bf_Filename:备份文件名,需包含完整路径,如为网络上的路径,需写全如 |
| //computername/share/backup.dat |
| 如成功,则返回true |
|_______________________________________________________________________}

Var
Myquery1:TQuery;
AliasParams : TStringList;
AliasName : string;
begin
//建立一BDE别名连至master数据库
if Session.IsAlias('Tempmaster') then
Session.DeleteAlias('Tempmaster');
AliasName:='Tempmaster';
AliasParams := TStringList.create;
try
AliasParams.Values['SERVER NAME'] := SerVerName;
AliasParams.Values['DATABASE Name'] := 'master';
AliasParams.Values['USER NAME'] := UserName;
AliasParams.Values['MAX QUERY TIME'] := '3600';
Session.AddAlias
(AliasName, 'mssql', AliasParams);
Session.SaveConfigFile;
AliasParams.Free;
except
AliasParams.Free;
end;
//Mydatabase最好在程序中设置好,再在此函数中引入
Mydatabase.close;
Mydatabase.AliasName:='Tempmaster';
Mydatabase.Params.BeginUpdate ;
Mydatabase.Params.Clear ;
Mydatabase.Params.Add('USERNAME='+username);
Mydatabase.Params.Add('Password='+TempPassword);
Mydatabase.Params.Add('MAX QUERY TIME=3600');
Mydatabase.Params.EndUpdate ;
try
Mydatabase.Open ;
except
result:=false;
Exit;
end;
MyQuery1:=TQuery.Create(Nil);
MyQuery1.DatabaseName:=Mydatabase;

try
with MyQuery1 do
begin
close;
Sql.Clear;
Sql.Add('use Master');
sql.Add('BACKUP DATABASE ['+dBaseName+'] TO DISK = '''+Bf_Filename+''' WITH NOINIT , NOUNLOAD , NAME = ''emanage2688备份'', NOSKIP , STATS = 10, NOFORMAT');
ExecSql;
end;
result:=true;
except
result:=false;
end;
MyQuery1.free;
end;

 
谢谢:delphihha
但{
sql.Add('BACKUP DATABASE ['+dBaseName+'] TO DISK = '''+Bf_Filename+''' WITH NOINIT , NOUNLOAD , NAME = ''emanage2688备份'', NOSKIP , STATS = 10, NOFORMAT');
}
并不能实现-----“调度“功能啊,到一定的时间,它自动执行备份

请继续关注,谢谢!
 
要调度最简单的就是上面程序里放一个计时器,然后一直运行呗。到点就执行备份语句....
 
这样啊,那SQL Server自己设的调度是用什么办法的呢?用SQL 语句不能实现吗?
 
sqlserver自动备份没问题,只要启动SQLSERVERAGENT服务即可。
启动方法:
调出服务管理器,在服务列表中选择SQLSERVERAGENT启动变可。
WIN98下即,桌面型SQLSERVER也可启动。但无法添加到自动启动项中。
需要手工在注册表中添加
 
用SQL 语句实现调度:
1.建立作业:

declare @id BINARY(16)
exec msdb..sp_add_job @job_name = N'zb backup1', @enabled = 1, @start_step_id = 1, @notify_level_eventlog = 2, @notify_level_email = 0, @notify_level_netsend = 0, @notify_level_page = 0, @delete_level = 0, @category_name = N'[Uncategorized (Local)]', @job_id = @id OUTPUT
select @id

2.建立作业步骤:(@job_id =后的0xC26AFAA61F7F0D4BB30017A9D57F39D7是在建立作业时的@id,以数据库zb为例,每天两点钟覆盖备份到C:/zbsql4.9)
msdb..sp_add_jobstep @job_id = 0xC26AFAA61F7F0D4BB30017A9D57F39D7, @step_id = 1, @cmdexec_success_code = 0, @on_success_action = 1, @on_success_step_id = 0, @on_fail_action = 2, @on_fail_step_id = 0, @retry_attempts = 0, @retry_interval = 0, @os_run_priority = 0, @flags = 0, @step_name = N'Step 1', @subsystem = N'TSQL', @command = N'BACKUP DATABASE [zb] TO DISK = N''C:/zbsql4.9'' WITH INIT , NOUNLOAD , NAME = N''zb backup'', SKIP , STATS = 10, NOFORMAT ', @database_name = N'master'

3.确定调度时间:(@job_id =后的0xC26AFAA61F7F0D4BB30017A9D57F39D7是在建立作业时的@id,以数据库zb为例,每天两点钟覆盖备份到C:/zbsql4.9)

exec msdb..sp_add_jobschedule @job_id =0xC26AFAA61F7F0D4BB30017A9D57F39D7, @name = N'Schedule 1', @enabled = 1, @freq_type = 4, @freq_interval = 1, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0, @freq_recurrence_factor = 1, @active_start_date = 20020519, @active_end_date = 99991231, @active_start_time = 20000, @active_end_time = 235959

SQL 2000的联机帮助是中文的,如不明白参数可以查阅帮助文件,代理Agent服务要启动,不然不会自动备份。

 
TO:zylsoft
谢谢你,但我还想问问,
”(@job_id =后的0xC26AFAA61F7F0D4BB30017A9D57F39D7是在建立作业时的@id,“中的0xC26AFAA61F7F0D4BB30017A9D57F39D7
表示每天两点钟,那我要表示:每天18:00怎么做了?
能不能给我讲解下“每天两点钟”跟“0xC26AFAA61F7F0D4BB30017A9D57F39D7”是怎么换算的?

谢谢!
 
我的SQL SERVER备份语句:
var ss:string;
begin
with dm1 do begin
ss:='backup database '+con1.DefaultDatabase+' to disk=''';//con1是ADOCONNECTION控件
try
if saved.Execute then //saved是savedialog控件
begin
if FileExists(saved.FileName) then
DeleteFile(saved.FileName);
ss:=ss+saved.FileName+'''';
com1.CommandText:=ss; //com1是ADOCOMMAND控件
com1.Execute;
Application.MessageBox(
'备份已完成,建议将备份文件压缩保存到软盘!',
'提示',
MB_OK + MB_ICONinformation);
end;
except showmessage('操作失败请重新备份!');
end;
end;
 
to:mo
0xC26AFAA61F7F0D4BB30017A9D57F39D7并不表示时间,他是作业的ID号(唯一的,用来识别作业)

@freq_type代表周期:
4: Daily
8: Weekly
@active_start_time才代表时间的,18:00可写成180000
 
谢谢各位,谢谢zylsoft

不知大家是用SQL SERVER 的工具做数据库备份的还是编程备份的?
 
我現在是自己編的一個小工具實現備份。就是拷貝那兩個文件。
這並不是一個好辦法,但是我一直想不出來。
如果各位有什麼好的辦法,請告訴我一聲。
QQ.52128393
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
850
SUNSTONE的Delphi笔记
S
S
回复
0
查看
782
SUNSTONE的Delphi笔记
S
S
回复
0
查看
745
SUNSTONE的Delphi笔记
S
S
回复
0
查看
754
SUNSTONE的Delphi笔记
S
后退
顶部