exec sp_addumpdevice 'disk', @DevName_log,@log_path select @rc=@@error IF @RC<>0 begin EXEC SP_DropDevice @Devname_data exec sp_dropdevice @devname_log SELECT @RC=-1000 return @rc end END
IF @kind='backup' BEGIN IF @bakequip=0 BEGIN IF @baktype=0 BEGIN IF @bakdb=0 BEGIN BACKUP DATABASE Northwind TO DISK=@Devname_data WITH INIT END IF @baklog=0 BEGIN BACKUP LOG Northwind WITH NO_LOG BACKUP LOG Northwind TO DISK=@DevName_log WITH INIT,NO_TRUNCATE END END ELSE BEGIN IF @bakdb=0 BEGIN BACKUP DATABASE Northwind TO DISK=@DevName_data WITH NOINIT END IF @baklog=0 BEGIN BACKUP LOG Northwind WITH NO_LOG BACKUP LOG Northwind TO DISK=@DevName_log WITH NOINIT,NO_TRUNCATE END END END SELECT @retmsg='数据库备份成功!' END
IF @kind='restore' BEGIN RESTORE DATABASE Northwind FROM DISK= @DevName_data WITH REPLACE SELECT @retmsg='恢复数据库成功!' END
RETURN 0
1﹑放一個adoconnection2﹐adoquery2在窗體上。(adoconnection2要連MASTER數據庫) 2﹑恢復前先將另一個adoconnection斷開﹕ adoconnection1.connected:=false; adoconnection2.connected:=true; adoquery2.connection:=adoconnection2; with adoquery2 do begin close; sql.clear; sql.Add('restore database 數據庫名 from disk='''+備份文件路徑+''' with replace'); execsql; close;
数据库恢复: with adoquery do begin sql.add('use master restore database name from disk=''c:\name.bak'' with replace'); //name:你的数据库名称 execsql; end;
sleep(50000); //解决超时已过期的问题 with ADOQuery_procedure do begin Close; SQL.Clear; SQL.Add(' use master restore database '+dmData.database+' from disk='+''''+Efilename.Text+''''+' with replace'); ExecSQl; end;
with ADOQuery_procedure do begin Close; SQL.Clear; SQL.Add('restore database '+dmData.database+' fromdisk='+''''+Efilename.Text+''''+' with replace'); ExecSQl; end;
create PROCEDURE GY_DBBak
@bakequip int, -- 备份设备:磁盘&磁带
@bakpath varchar(50), -- 带全路径的备份文件名
@baktype int, -- 完全备份&增量备份
@baklog int, -- ‘0’备份日志
@bakdb int, -- ‘0’备份数据库
@kind varchar(7), --备份还是恢复
@retmsg varchar(20) output --返回信息
AS
DECLARE @DevName_data varchar(50)
DECLARE @DevName_log varchar(50)
declare @db_path varchar(100)
declare @log_path varchar(100)
DECLARE @RC INT SELECT @db_path = @bakpath + '.dat'
SELECT @log_path = @bakpath + 'log.dat'
SELECT @RC=0 DBCC CHECKDB(Northwind)
/***********************************************************
** CREATE BACKUP AND RESTORE DEVICES
************************************************************/
IF @RC=0
BEGIN
EXEC sp_addumpdevice 'disk', @DevName_data,@db_path
exec sp_addumpdevice 'disk', @DevName_log,@log_path
select @rc=@@error
IF @RC<>0
begin
EXEC SP_DropDevice @Devname_data
exec sp_dropdevice @devname_log
SELECT @RC=-1000
return @rc
end
END
IF @kind='backup'
BEGIN
IF @bakequip=0
BEGIN
IF @baktype=0
BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE Northwind TO DISK=@Devname_data
WITH INIT
END
IF @baklog=0
BEGIN
BACKUP LOG Northwind WITH NO_LOG
BACKUP LOG Northwind TO DISK=@DevName_log
WITH INIT,NO_TRUNCATE
END
END
ELSE BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE Northwind TO DISK=@DevName_data
WITH NOINIT
END
IF @baklog=0
BEGIN
BACKUP LOG Northwind WITH NO_LOG
BACKUP LOG Northwind TO DISK=@DevName_log
WITH NOINIT,NO_TRUNCATE
END
END
END
SELECT @retmsg='数据库备份成功!'
END
IF @kind='restore'
BEGIN
RESTORE DATABASE Northwind FROM DISK= @DevName_data WITH REPLACE
SELECT @retmsg='恢复数据库成功!'
END
RETURN 0
2﹑恢復前先將另一個adoconnection斷開﹕
adoconnection1.connected:=false;
adoconnection2.connected:=true;
adoquery2.connection:=adoconnection2;
with adoquery2 do
begin
close;
sql.clear;
sql.Add('restore database 數據庫名 from disk='''+備份文件路徑+''' with replace');
execsql;
close;
现在数据库服务的状态是:正在装载..
可我已经把程序停止了啊,怎么才能恢复到正常状态呢?
with adoquery do
begin
sql.add('use master restore database name from disk=''c:\name.bak'' with replace'); //name:你的数据库名称
execsql;
end;
with ADOQuery_procedure do begin
Close;
SQL.Clear;
SQL.Add(' use master restore database '+dmData.database+' from disk='+''''+Efilename.Text+''''+' with replace');
ExecSQl;
end;
begin
Close;
SQL.Clear;
SQL.Add('restore database '+dmData.database+' fromdisk='+''''+Efilename.Text+''''+' with replace');
ExecSQl;
end;