• ベストアンサー

MSDEバックアップ

現在弥生会計08ネットワークというソフトを使用しています 上記ソフトはMSDEを使用して データベースフォルダに _data01aaaa , _data02sedfという風に_dataまでは同じ文字列でそれ以降は違う文字列のデータベースを作成して行きます。 _dataと名のつくデータベースだけをバッチファイルなどを使用して自動でバックアップを取りたいと考えています。 何かよい方法があればお教え願いますでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

MSDEですか。。osql使うしかないでしょうね。 1)バックアップスクリプトを作成する  実行するコマンドはBACKUP DATABASE xxxx TO DISK='xxxxxx' WITH INIT  とシンプルなものですが、「dataを含むもの」をリストアップするためには  カーソル処理が必要になります。 (backup.sql) DECLARE @bkpath varchar(1000) SET @bkpath='C:\フォルダ\' --バックアップフォルダ指定 DECLARE @sql varchar(8000) DECLARE @database varchar(128) DECLARE DB_CUR CURSOR FOR SELECT name from sysdatabases WHERE name like '%data%' OPEN DB_CUR FETCH NEXT FROM DB_CUR INTO @database WHILE (@@FETCH_STATUS=0) BEGIN SET @sql='BACKUP DATABASE '+@database+' TO DISK='''+@bkpath+@database+'.bak'' WITH INIT' EXEC (@sql) FETCH NEXT FROM DB_CUR INTO @database END CLOSE DB_CUR DEALLOCATE DB_CUR 2)上記を実行するバッチファイルを作成する @ECHO OFF osql -Usa -P(pass) -S(Server) -i C:\フォルダ\backup.sql > C:\フォルダ\log.txt 3)上記バッチファイルをスケジューラ登録する

matupo69
質問者

補足

jamshid6様 早速のご教授大変感謝しております、 頂いたスクリプトにて検証した結果log.txtに以下メッセージがでてバックアップ出来ていませんでした。 1> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16> 17> 18> 19> 20> 21> メッセージ 102、レベル 15、状態 1、サーバー SONYSBS\YAYOI、行 1 '1' 付近に不適切な構文があります。 メッセージ 319、レベル 15、状態 1、サーバー SONYSBS\YAYOI、行 1 キーワード 'with' 付近に不適切な構文があります。このステートメントが共通テーブル式または xmlnamespaces 以下WHERE name like '%_AC%'で探したデータベースの数同じエラーがあります 自分で変更したスクリプトとバッチファイルを掲載します。 DECLARE @bkpath varchar(1000) SET @bkpath='C:\dbbackup' DECLARE @sql varchar(8000) DECLARE @database varchar(128) DECLARE DB_CUR CURSOR FOR SELECT name from sysdatabases WHERE name like '%_AC%' OPEN DB_CUR FETCH NEXT FROM DB_CUR INTO @database WHILE (@@FETCH_STATUS=0) BEGIN SET @sql='BACKUP DATABASE '+@database+' TO DISK='''+@bkpath+@database+'.bak'' WITH INIT' EXEC (@sql) FETCH NEXT FROM DB_CUR INTO @database END CLOSE DB_CUR DEALLOCATE DB_CUR バッチファイル @ECHO OFF osql -E -S localhost\yayoi -i C:\dbback\backup.sql > C:\dbback\log.txt 何卒お知恵をお貸し下さい、お願い致します。

その他の回答 (3)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.4

前のスクリプトはデータベース毎に BACKUP DATABASE xxxx TO DISK='xxxxxx' WITH INIT というコマンドを組み立てて実行するというものでしたよね。 ですから、戻すときは RESTORE DATABASE xxxx FROM DISK='xxxxxx' WITH REPLACE というコマンドを組み立てて実行するだけです。 ちょっと変更しただけで出来上がります。 ・リストアを行うと、データベースの内容は上書きされますから、バックアップよりも慎重にテストしてください。 (いきなり本番環境でやったりしないように) ・それから、出来上がったバッチファイルも危険です(ダブルクリックしただけでリストアされてしまう。業務時間中やバックアップ直前に間違えて叩こうものなら悲惨なことになります)。ご注意ください。

matupo69
質問者

お礼

jamshid6様 ご指示の通り BACKUP DATABASE xxxx TO DISK='xxxxxx' WITH INITの部分を RESTORE DATABASE xxxx FROM DISK='xxxxxx' WITH REPLACEに書き換えることでリストアに成功しました。 現在はテスト環境での検証ですが、jamshid6様アドバイスに従い慎重に作業を 行いたいと存じます(データの消失など想像しただけで胃が引きつってしまいます ^_^;) 今回、jamshid6様の貴重なアドバイスを頂き本当に感謝しています、 私MSN相談箱で質問するのが初めてで、jamshid6様の回答を良回答にする方法が分からず良回答マークが付けられませんでした事を申し訳なく思います。 そして今回のやり取りをより多くの方が参考にして活用して頂く事を祈っております、 jamshid6様、私のような初心者を相手に付き合って頂き、本当に有難う御座いました m(__)m

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

カギカッコの位置を変更してください SET @sql='BACKUP DATABASE ['+@database+'] TO DISK='''+@bkpath+@database+'.bak''

matupo69
質問者

お礼

jamshid6様 お蔭様で、当初の要望通りの事が出来ました有難う御座います、 ここでもうひとつご教授して頂きたい事があるのです、図々しい質問かと存知ますが敢えて質問します。 jamshid6様のスクリプトで出来上がったバックアップファイル群を一括で リストアしたいのですがお教え願います。。。。。 これさえ出来れば肩の荷が降りる状況です、何卒よろしくお願い致します。

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

あらー、見たところ合っているみたいですが。。MSDEって"WITH INIT"をサポートしてなかったですかね。。 (MSDE2000ReleaseAで試したつもりでしたが) とりあえず、以下をお試しください。 1) スクリプトファイルのうち「EXEC (@sql)」の部分を「SELECT @sql」に変更し、実行してみる。  結果は「BACKUP DATABASE ...」というコマンドがずらっと吐き出されるはずなので、正しく組み上がって  いるかチェックする 2) スクリプトファイルの中身を以下だけにする BACKUP DATABASE (本当のDB名どれか1つ) TO DISK='C:\dbbackup(本当のDB名どれか1つ)' WITH INIT 3) スクリプトファイルの中身を以下だけにする BACKUP DATABASE (本当のDB名どれか1つ) TO DISK='C:\dbbackup(本当のDB名どれか1つ)' もし、2がダメで3がOKならば、「WITH INIT」がだめかもしれません。 その場合は多分バックアップは追加書きになるので、バックアップのバッチファイルの先頭でDELしないといけません。。

matupo69
質問者

お礼

アドバイス有難うございます、 いろいろ試した結果、バックアップ目的のデータベース名に日本語名が含まれる ためでした。 英語表記のデータはエラー無くバックアップ出来ました、公開して頂いたスクリプトは正しかったです。 弥生会計の作成するデータベース名は日本語で _AC060_試験(1期).mdf _AC060_試験(1期)_logLDF といった具合です osqlコマンドで単発でバックアップする場合 BACKUP DATABASE [_AC060_試験(1期)] TO DISK='C:\dbback' という風に[]のなかに日本語データベース名を入れることでバックアップできます 頂いたスクリプトの中に[]を入れたのですがうまくいきません たとえば SET @sql='BACKUP DATABASE '[+@database+]' TO DISK='''+@bkpath+@database+'.bak'' こんな感じです 何とかなりますか、、、、、、、、 お願いします。。。。。

関連するQ&A