85 lines
1.8 KiB
ObjectPascal
85 lines
1.8 KiB
ObjectPascal
program StartBackup;
|
|
|
|
{$APPTYPE CONSOLE}
|
|
|
|
uses
|
|
SysUtils, JvUIBase, JvUIBLib;
|
|
|
|
const
|
|
user = 'SYSDBA';
|
|
pass = 'masterkey';
|
|
|
|
var
|
|
svc_handle: IscSvcHandle = nil;
|
|
respbuf: string;
|
|
spb, thd: string;
|
|
Len: Word;
|
|
FLibrary:TUIBLibrary;
|
|
|
|
begin
|
|
if (ParamCount <> 2) then
|
|
begin
|
|
writeln(ParamCount);
|
|
writeln(format('Usage: %s dbfile backupfile', [ParamStr(0)]));
|
|
readln;
|
|
halt(1);
|
|
end;
|
|
|
|
FLibrary := TUIBLibrary.Create;
|
|
try
|
|
spb := spb + isc_spb_version;
|
|
spb := spb + isc_spb_current_version;
|
|
|
|
spb := spb + isc_spb_user_name;
|
|
spb := spb + char(Length(user));
|
|
spb := spb + user;
|
|
|
|
spb := spb + isc_spb_password;
|
|
spb := spb + char(strlen (pass));
|
|
spb := spb + pass;
|
|
|
|
FLibrary.ServiceAttach('service_mgr', svc_handle, spb);
|
|
try
|
|
thd := thd + isc_action_svc_backup;
|
|
|
|
thd := thd + isc_spb_dbname;
|
|
thd := thd + Char(Length(ParamStr(1)));
|
|
thd := thd + Char(Length(ParamStr(1))shr 8); // second part of smallint
|
|
thd := thd + ParamStr(1);
|
|
|
|
thd := thd + isc_spb_bkp_file;
|
|
thd := thd + Char(Length(ParamStr(2)));
|
|
thd := thd + Char(Length(ParamStr(2))shr 8);
|
|
thd := thd + ParamStr(2);
|
|
|
|
thd := thd + isc_spb_verbose;
|
|
|
|
Writeln('Attach succeed');
|
|
FLibrary.ServiceStart(svc_handle, thd);
|
|
SetLength(respbuf, 1024);
|
|
|
|
while true do
|
|
begin
|
|
FLibrary.ServiceQuery(svc_handle, '', isc_info_svc_line, respbuf);
|
|
if (respbuf[1] <> isc_info_svc_line) then
|
|
begin
|
|
WriteLn('Invalid line.');
|
|
Exit;
|
|
end;
|
|
Len := PWord(@respbuf[2])^;
|
|
if len > 0 then
|
|
Writeln(copy(respbuf, 4, len)) else
|
|
Break;
|
|
end;
|
|
finally
|
|
FLibrary.ServiceDetach(svc_handle);
|
|
writeln('Press enter to continue.');
|
|
Readln;
|
|
end;
|
|
finally
|
|
FLibrary.Free;
|
|
end;
|
|
|
|
|
|
end.
|