• ベストアンサー

batファイルの記述について

PCにインストールされているMSDEのバックアップをタスクで取得したいと思っています。 いつも、コマンドを手入力して取得しているのですが、batにすることはできないでしょうか。 参考ページとかでも構いませんので、アドバイスを頂ければ幸いです。 ちなみに、下記のように入力しています。 C:\>osql -E 1>backup database database名 to disk="c:\msdebackup\backup.bak" 2>backup database database名_log to disk="c:\msdebackup\backup_log.bak" 3>go 以上、宜しくお願い致します。

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

外部SQL文の実行というパターンにしていまえばいいのでは? ウチのSQLServer2005(Express Edition)だと   sqlcmd -i C:\SQL_Backup.sql -o C:\SQL_Backup.log ってなってますね。で、SQL_Backup.sqlの内容が   backup database XXXXX to XXXXX;   backup database YYYYY to YYYYY; と書いてます。

fineshot33
質問者

お礼

ありがとうございました。 私のはMSDEなので、実行コマンドあosqlになりますが、基本的にSQLのオプションと変わらないようですね。 (SQLを使ったことがないので分からないのですが・・・) ご教授頂いた実行文と若干違う手法になりましたが、無事に目的を達成できました。 今後とも宜しくお願い致します。

その他の回答 (1)

  • Donotrely
  • ベストアンサー率41% (537/1280)
回答No.1

こういう経験はありませんが、 スクリプトを記述し、これを.batでosql.exeを起動して実行するように するんじゃないのかな?自信無し。

fineshot33
質問者

お礼

ちょっとスクリプトには自信がないので、試していませんが アドバイス頂きましてありがとうございました。 今後とも宜しくお願い致します。

関連するQ&A

  • バッチファイルが動かない

    教えて下さい。 ==================== CD \ OSQL -Usa -Psa BACKUP DATABASE Mydb TO DISK='C:\project\MyDB.bak' go ===================== 上記のバッチを作成し起動しても、2行目迄動き、 コマンドプロンプトで止まってしまいます。 何故でしょうか?

  • 2008でバッチファイルからバックアップするには?

    お世話になっております。 SQL Server 2008 Expressで、DBのバックアップを定期的に取ろうとしているのですが、うまくいきません。 SQL Serverのタスク等ではなく、バッチファイルを作成し、 タイムスタンプを付けて保存したいと思っています。 例:「TESTDB_YYYYMMDD_HHMMSS.bak」 2005のときは、以下のファイルを用意し、 Backup.bat Backup.sql ---- Backup.bat 内容 ------------------------ sqlcmd -SMYPC\SQLEXPRESS -Usa -iC:\DBBackup\DBBackup.sql -P"" >> C:\DBBackup\backup.log (タイムスタンプを付ける処理) ---- Backup.sql 内容 ------------------------ BACKUP DATABASE [TESTDB] TO DISK = N'C:\DBBackup\TESTDB.bak' WITH NOFORMAT, NOINIT, NAME = N'TESTDB-完全 データベース バックアップ', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO 同様の処理を2008上で行うと、特にエラーメッセージも出ないのですが、 バックアップファイルが出力されません。 (Management Studio Express上でSQLを流すとバックアップファイルが出力されます。) SQLCMDの仕様が変わった為かと思いますが、 解決策をご存知の方いらっしゃいましたら、宜しくお願い致します。

  • batファイルで、call使っても戻ってこない

    こんにちは 教えてほしいことがあります。 batファイルで他のbatファイルを実行するためにcallで呼び出すと、処理がまた戻ってくる事を知り、 以下のようにやってみたのですが、戻ってきている様子がありません。 どこが間違っているのか教えていただければと思います。 以下file-backup.bat echo 処理開始 >> %LOG% date /t >> %LOG% time /t >> %LOG% C:\****\Backup\FastCopy198\fastcopy.exe /cmd=force_copy /auto_close /open_window /error_stop=TRUE /log /from_date="-2D" "D:\file2" "/to=\\********\file2" @echo off call "Z:\file-backup2.bat" echo 処理終了 >> %LOG% ←---これ以下がログファイルに表示されない time /t >> %LOG% echo. >> %LOG% ログに「処理終了」が入ってきませんので、callで戻ってきていないと判断しました。 環境はwinserver2008です。 ご教授お願いします。

  • ログファイルの圧縮がされずに容量が日々増加してしまっています。

    ログファイルの圧縮がされずに容量が日々増加してしまっています。 SQLServer2008のジョブで定期的に以下の3ステップを行っています。 SHRINKFILEで毎回、圧縮できないでいます。 何が原因でしょうか。どのように解決したら良いかわからず投稿させていただきました。 【ステップ1 コマンド】 BACKUP DATABASE [TEST_DB] TO DISK = N'F:\TEST_DBバックアップ\TEST_DBバックアップ.bak' WITH FORMAT, NAME = N'TEST_DB-完全 データベース バックアップ', SKIP, NOREWIND, NOUNLOAD, STATS = 10 【ステップ1 ログ】 BACKUP DATABASE により 22350897 ページが 1706.690 秒間で正常に処理されました 【ステップ2 コマンド】 BACKUP LOG TEST_DB TO DISK = N'F:\TEST_DBバックアップ\TEST_DB_LOGバックアップ.bak' 【ステップ2 ログ】  BACKUP LOG により 473562 ページが 55.721 秒間で正常に処理されました 【ステップ3 コマンド】  DBCC SHRINKFILE(TEST_DB_Log,1024) 【ステップ3 ログ】 圧縮できません。ファイルの末尾にある論理ログ ファイルが使用中です。 稿させていただきました。

  • ORACLEでのexportのbatファイルの記述

    Windows2000ServerでOracle8.1.7を使用しています。 定期的にバックアップを取りたいため、exportを行う Batファイルを以下のように記述しましたが、うまくいきません。 ■batファイル----------------------- exp user/password parfile=EXP.TXT ----------------------------------- ■EXP.TXT owner=owner file=d:\back\exp.dmp log=d:\back\backup.log grants=y indexes=y ----------------------------------- このbatファイルを実行すると、文章ではうまく表現できないのですが 「exp user/password parfile=EXP.TXT」 の部分がDOS窓上で永遠に何行もスクロールしていっこうに コマンドが実行されません。 ただ「exp user/password parfile=EXP.TXT」と dos窓をあけて手入力するときちんと実行されます。 oracle7.3.4でも「exp73」で行えばこのbatファイルで きちんとexportが始まります。 ORACLEというよりはdosの知識かと思われますが どなたか、きちんと実行できる方法を教えてください。

  • またまたMSDEです、

    http://www.wings.msn.to/contents/env/asp_net/msde.html このページをみながらやってます。 4.データベースを展開するというところで、 > osql -S(local) -Usa -Psa -Q"RESTORE DATABASE sample FROM DISK='D:\sample.bak' WITH REPLACE" をプロンプトで打つと出来るらしいのですが、 >ユーザー'sa'のログオンに失敗しました。理由:SQL Server の信頼関係接>続に関連付けられていません。 とでます。 よろしくお願いします。

  • バッチファイルのタスクスケジューラでの実行について教えて下さい。

    AAAのパソコンのDドライブの111というフォルダを、ネットワーク経由でBBBのパソコンのDドライブの222という共有フォルダ内に333というフォルダ内へxcopyでコピーするバッチ(backup.bat)を作ってタスクスケジューラで1日1回自動実行させようと思うのですが、うまくいきません。どうすればよいのでしょうか? AAAパソコン:Windows2000 professional SP4        000フォルダ内にbackup.bat(共有フォルダではないです)        111フォルダは共有フォルダではないです        ユーザーアカウント⇒Administrator        パスワードはないです        BBBパソコン:WindowsXP professional SP2        222フォルダは共有フォルダ        333フォルダは222の共有フォルダの中        ユーザーアカウント⇒バックアップ        パスワード⇒123 バッチファイル(backup.bat)  ↓  net use \\BBB\222 123 /user:バックアップ  xcopy d:\111 \\BBB\222\333\ /E/C/F/H/R/K> d:\バックアップログ.log  net use \\BBB\222 /delete 上記バッチファイルをAAAパソコンの「タスクの実行するファイル名」に直接登録(d:\000\backup.bat)して実行させてみたのですが、タスクの詳細設定のログ表示でログを見ると、『タスクは次の終了コードで完了しました:(1).』となっていて実行されませんでした。 cmd.exe /c d:\000\backup.batでタスク登録してもだめでした。 バッチファイル(backup.bat)をダブルクリックして実行するとBBBパソコンにコピーできます。 タスク設定時の   実行するアカウント名⇒AAA\Administrator   パスワードはなし よろしくお願いいたします。

  • batファイルのxcopyでエラー

    Windows Server2003のバックアップをbatファイルのxcopyを使って行いました。 xcopy F:\...\フォルダ名\*.* L:\BACKUP\フォルダ名 /d /e /c /k /r /h /y > L:\BACKUP\BACKUPLOG\フォルダ名.log そのとき、「コピー中にエラーが起きました。」というメッセージが表示され、正常にコピーできないサブフォルダがありました。 フォルダ名に半角括弧が含まれていることが原因でコピーできなかったと考えているのですが、そのようなことってあるのでしょうか。 しかも、エラーメッセージをほっといたら消えていたので、どこのフォルダだったかわからなくなってしまいました。 バックアップは定期的に行っているのですが、2回目以降はなぜかエラーメッセージが出てきません。 しかもログファイルは上書きされていて、「○○個のファイルがコピーされました。」という旨のメッセージしか書かれていません。 もう一度エラーメッセージを表示させてそのサブフォルダを見つける良い方法があったら、教えてください。 お願いします。

  • sqlserverのバックアップを定期的に取りたいと考えています。

    sqlserverのバックアップを定期的に取りたいと考えています。 バージョンは2005です。 やり方は下記のページを見つけました。 http://okwave.jp/qa/q4798230.html 上記のスクリプトファイルなのですが、固定の名前ではなく日付をつけくわえたbakファイルを作りたいと考えています。 例 testdb_2010xxxx.bak しかし、下記のようなスクリプトを書いてもうまく動きませんでした。 backup database testdb to disk = N'c:\Backup\testdb_'+DATEPART(yyyy, GETDATE())+DATEPART(m, GETDATE())+DATEPART(d, GETDATE())+'.bak' 文字列の連結のやり方がおかしいのだと思いますが、どこが間違っているのでしょうか。

  • SQLServer2005 メンテナンスプランについて

    SQLServer2005の管理、メンテナンスプランについての質問です。 互換性レベル7.0で運用しているDBのバックアップタスクを作成したいと思っています。 ツールボックスから「データベースのバックアップタスク」を使用すると、対象のDBとしてリストに表示されないため、 「T-SQLの実行タスク」を作成し、ステートメントに以下のように記述しました。バックアップは正常終了するのですが。。。 -------------------クエリここから----------------- BACKUP DATABASE [DB_NAME] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_200901151519.bak' WITH NOFORMAT, NOINIT, NAME = N'DB_NAME_backup_20090115151905', SKIP, REWIND, NOUNLOAD, STATS = 10 GO declare @backupSetId as int select @backupSetId = position from msdb..backupset where database_name=N'DB_NAME' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'DB_NAME' ) if @backupSetId is null begin raiserror(N'確認に失敗しました。データベース ''DB_NAME'' のバックアップ情報が見つかりません。', 16, 1) end RESTORE VERIFYONLY FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_200901151519.bak' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND -------------------クエリここまで----------------- ここで、問題なのは、バックアップファイル名の指定が「DB_NAME_backup_200901151519.bak」固定であることです。 実行日時を取得してファイル名を生成するため、以下のように引数の「DISK」と「NAME」を変数で指定するように変更しました。 しかし、クエリの実行をすると、メッセージに以下のエラーが出力され、実行できません。 引数の渡し方が誤っているのでしょうか? 宜しくご教授願います。 -------------------変更後クエリここから----------------- DECLARE @TODAY VARCHAR(30); DECLARE @YYYY VARCHAR(4); DECLARE @MM VARCHAR(2); DECLARE @DD VARCHAR(2); DECLARE @HH VARCHAR(2); DECLARE @M VARCHAR(2); DECLARE @S VARCHAR(2); DECLARE @DISK VARCHAR(200); DECLARE @NAME VARCHAR(100); set @TODAY = convert(varchar, GETDATE(), 121); set @YYYY = SUBSTRING(@TODAY, 1, 4); set @MM = SUBSTRING(@TODAY, 6, 2); set @DD = SUBSTRING(@TODAY, 9, 2); set @HH = SUBSTRING(@TODAY, 12, 2); set @M = SUBSTRING(@TODAY, 15, 2); set @S = SUBSTRING(@TODAY, 18, 2); set @DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_'+@YYYY + @MM + @DD + @HH + @M +'.bak'; set @NAME = N'DB_NAME_backup_'+@YYYY + @MM + @DD + @HH + @M + @S; print 'DISK:'+@DISK print 'NAME:'+@NAME BACKUP DATABASE [DB_NAME] TO DISK = @DISK WITH NOFORMAT, NOINIT, NAME = @NAME, SKIP, REWIND, NOUNLOAD, STATS = 10 GO declare @backupSetId as int select @backupSetId = position from msdb..backupset where database_name=N'DB_NAME' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'DB_NAME' ) if @backupSetId is null begin raiserror(N'確認に失敗しました。データベース ''DB_NAME'' のバックアップ情報が見つかりません。', 16, 1) end RESTORE VERIFYONLY FROM DISK = @DISK WITH FILE = @backupSetId, NOUNLOAD, NOREWIND -------------------変更後クエリここまで----------------- -------------------メッセージここから------------------- DISK:C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_200901211339.bak NAME:DB_NAME_backup_20090121133912 メッセージ 137、レベル 15、状態 2、行 1 スカラ変数 "@DISK" を宣言してください。 メッセージ 137、レベル 15、状態 2、行 4 スカラ変数 "@DISK" を宣言してください。 -------------------メッセージここまで------------------- 以上、よろしくお願い致します。