バックアップを作成するにはどうすればよいですか。 DBMS FireBird

画像

問題は、彼らが待たなかったところから生じました...「キャッシャー」プロセスがクライアントにハングアップしたため、彼はタスクマネージャーからプロセスを削除できませんでした。 職場「キャッシャー」は、同時にシステム全体のサーバーでもあります。

クライアントは、ボタンを介してリセットすることにしました。

その結果、DBは死にました。 Firebird 2.5

バックアップは構成されていなかったため、誤ってネジを締めたデータベースの最新バージョンはマイナス8日でした。 彼らは彼女からすぐにそれを拾いました。 しかし、ポイントはそれ以上です。

FireBirdのバックアップを作成する方法。

起動時にDatabaseDannah_30_05_2017_23_07_51.fbkというデータベースをバックアップするスクリプトを作成しました

@echo off set "currentTime=%Time: =0%" set now=%date:~-4%_%date:~3,2%_%date:~0,2%_%currentTime:~0,2%_%currentTime:~3,2%_%currentTime:~6,2% set user=SYSDBA set password=masterkey set database_name=PARKDB.FDB set backup_name=Backup\PARKDB set ext=.fbk set backup_filename=%backup_name%_%now%%ext% echo %backup_filename% nbackup -U %user% -P %password% -B 0 %database_name% %backup_filename% 

 %date:~3,2% 

これは、結果の日付(これはWindowsシステム関数)から、行の3桁から始まる2文字を取得することを意味します。 通常の%日付%= 2017年5月31日

 set "currentTime=%Time: =0%" 

クロックが10未満の場合、つまり、このコマンドなしでコマンドを実行する場合、0を考慮して時間をかけることを意味します。

 set now=%date:~-4%_%date:~3,2%_%date:~0,2%_%currentTime:~0,2%_%currentTime:~3,2%_%currentTime:~6,2% 

今すぐ取得= 2017_05_31_ 0_44_33、ファイル名は次のようになります:Backup \ PARKDB_2017_05_31_ 0_44_33.fbk。 スペースはあまり見えませんが、nbackupのファイル名では受け入れられません。日時は現在のシステム時刻から取得されます。 次に、スクリプトを常に実行するために、Windowsタスクスケジューラにタスクを追加し、4時間ごとにスクリプトを起動し、新しいデータベースを作成します。その後、コマンドラインからタスクスケジューラでタスクを作成する方法を学びました。

 @echo off set script_name=e:\SoftBuild\Parking\DB\DB_Backup.bat set task_name=LotParkingBackup SCHTASKS /Create /SC DAILY /TN %task_name% /TR %script_name% /HRESULT /F /RI 240 /DU 24:00 /v1 

パラメーターの詳細については、ヘルプをご覧ください。 SCHTASKS /作成/?

次に、彼は、今説明したことを実行するスクリプトをインストーラーに追加し、インストーラーから開始します。

 function NextButtonClick(CurPageID: Integer): Boolean; var ServerHost, ServerPort, DBFileName, FBDirPath: string; ResultCode, ErrorCode: Integer; UDFFrom, UDFTo, ReaderPort: string; RegistryTaskFile, DBDirPath, BackupScriptPath, RegistryFileName: string; begin if CurPageID = SettingsPage.ID then begin ServerHost := SettingsPage.Values[0]; ServerPort := SettingsPage.Values[1]; DBFileName := SettingsPage.Values[2]; if IsComponentSelected(cDB) then begin DBDirPath := Copy(DBFileName, 1, Pos('PARKDB.FDB', DBFileName) - 1); BackupScriptPath := DBDirPath + 'DB_Backup.bat' RegistryTaskFile := '@echo off' + #13#10 + 'set script_name=' + BackupScriptPath + #13#10 + 'set task_name=LotParkingBackup' + #13#10 + 'SCHTASKS /Create /SC DAILY /TN %task_name% /TR %script_name% /HRESULT /F /RI 240 /DU 24:00 /v1' + #13#10; RegistryFileName := DBDirPath + 'DB_RegistryBackup.bat'; SaveStringToFile(RegistryFileName, RegistryTaskFile, False); Exec(ExpandConstant(RegistryFileName), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); end; end; end; 

これで、バックアップを作成するスクリプトとタスクを登録するスクリプトができました。次に、コマンドラインからスケジューラからタスクを削除する方法を学びました。

 @echo off set task_name=LotParkingBackup SCHTASKS /DELETE /TN %task_name% /F 

インストーラーに追加されました。 パーキングプログラムを削除した場合、スケジューラからタスクを削除するスクリプトを実行する必要があります。

 [UninstallRun] Filename: "{app}\DB\DB_DeleteTask.bat"; WorkingDir: "{app}\DB\"; Flags: runhidden waituntilterminated; Components: DB 

その結果、4時間ごとにバックアップがあり、UnInstallを実行すると、すべてがきれいになります:)

オリジナル。

Source: https://habr.com/ru/post/J329914/


All Articles