SQL Serverデータベースのバックアップとリストア


sql serverデータベースでは、バックアップとリストアはいずれもサーバ上でのみ行うことができ、バックアップしたデータファイルはサーバ上で、リストアしたデータファイルもサーバ上でのみ行うことができ、非サーバのマシン上でsql serverクライアントを起動する場合、そのクライアント側でデータベースのバックアップとリストアを行うこともできるが、この操作は実質的にサーバ上で行われる.バックアップされたデータファイルはサーバ上にあり、復元されたデータファイルもサーバ上にしかありません.この原則は変わりません.クライアントのツールを使用してこのプロセスを操作しているだけです.
1.1、データベースのバックアップ
データベースのバックアップには、次の2つの方法があります.
1つ目は、エンタープライズマネージャで、ツールを使用してデータベースをバックアップすることです.このバックアップファイルは1つしかありません.bakの最後のファイル.このように1つのデータベースをバックアップする場合、任意の名前のバックアップファイルと接尾辞を付けることができ、バックアップ済みのバックアップファイルの名前と接尾辞名の変更を行うことができ、ファイルのリカバリに影響を与えないが、バックアップファイルの内部には元のデータベースが記録する.mdf和.ldfファイルの名前と格納されたパス.バックアップの場合、ターゲットフォルダにバックアップファイル名と同じ名前のファイルが既に存在する場合は、2つのオプション、添付と上書きがあり、一般的に上書きを選択します.提案:元のデータベース名をバックアップファイルのファイル名とし、.bakは接尾辞として使用する.
第2の方法は、データベースのdataフォルダを直接探して、直接mdf和.ldfファイルコピー保存.
1.2、データベースの復元
データベースのリストアには、次の2つの方法があります.
1つ目は還元です.bakファイルは、バックアップしたデータベースが特定されると、エンタープライズマネージャを使用して復元できます.復元された新しいデータベース名は任意であり、optionオプションでは、現在のマシンにSql Server 2005がインストールされているパスに基づいてパスを変更することもできるし、変更することもできる.mdf和.ldfファイルの名前、名前は識別子だけで、任意に修正してもいいです.コンパイラは.mdf和.ldfファイルは新しいデータベース名に関連付けられています.このように還元すると、生成する.mdf和.ldfファイルは、元のバックアップデータファイルを削除できます.リストアの場合、ターゲットフォルダに既にリストアファイル名と同じ名前のファイルが存在する場合は、元のデータファイルを上書きすることを選択できます.提案:リストア後も元のデータベース名をリストアデータベース名とし、optionオプションでは名前を変更しないで、必要に応じてパスを変更すればいい.
2つ目は還元です.mdf和.ldfファイル、復元するときはAttachでいいです.mdf和.ldfファイルを添付し、新しいデータベース名を付けますが、この2つのファイルは削除できません.そうしないと、データソースが失われます.提案:mdf和.ldfファイルはDataフォルダに格納.復元するデータベース名は元のデータベース名と同じである.
1.3、データベースのバックアップとリストアに関する2つの重要なフォルダ:
……\Microsoft SQL Server\MSSQL.1\MSSQL\Backup
------バックアップされたデータファイルの保存
……\Microsoft SQL Server\MSSQL.1\MSSQL\Data
                                        --------  .mdf .ldf  

1.4.sql serverのコマンドでリストアデータベースをバックアップする
私達は通常データベースをバックアップする時、sql serverクライアントを通じてデータベースサーバーにログインしてバックアップして回復する必要があって、このようにとても不便で、実はSQL SERVERの持っている命令はデータベースをバックアップして復元することができます.これらのコマンドは、sqlサーバクライアントのsqlスクリプトウィンドウで直接実行するもよいし、ADOを通過してもよい.Netは、これらのコマンドを呼び出して、リモート・バックアップとデータベースのリカバリを行います.
(1)、リストアデータベースをバックアップするコマンド
バックアップ:
BACKUP DATABASE’がバックアップされたデータベース名’TO DISK=‘バックアップファイルパス’;
-バックアップされたデータベース名は存在する必要があります.そうしないとエラーが発生します.
復元:
-データベースをオフラインにする
ALTER DATABASE’が復元されたデータベース名‘SET OFFLINE WITH ROlLBACKIMMEDIATE;
–データベースのリカバリ
RESTORE DATABASE'が復元されたデータベース名"FROM DISK="ファイルパス(ソースファイル)";
-データベースをオンライン状態にする
ALTER DATABASE’が復元されたデータベース名‘SET ONLINE WITH ROlLBACKIMMEDIATE;
-リカバリされたデータベース名は存在する必要があり、そのデータベースは上書きされ、リストアファイルパス(ソースファイル)は存在する必要があります.また、前後の2つのALTER文を実行する場合、選択したデータベースはmasterでなければなりません.
保険のためにALTER文を使わないこともあります.
(2)、コマンド応用
A、sql serverクライアントのsqlフォームで直接コマンドを実行できます.
B、データベースにストアド・プロシージャを書き込み、JOBを構成して、定期的にこのストアド・プロシージャを呼び出すことができます.
C、アプリケーションを通過するADO.NETは、これらのコマンドまたはコマンドからなるストレージ・プロシージャを実行し、アプリケーション制御バックアップ・リストア・データベースを実現します.これらのアプリケーションは、サービスとして作成され、定期的に呼び出されます.
(3)、C#ケース
//データベースのバックアップ
string sql = “backup database qis2006 to disk = '” + Server.MapPath("").ToString() +"\"
  • bakname+ System.DateTime.Now.DayOfYear.ToString() + System.DateTime.Now.Millisecond.ToString() +".bak’";//バックアップファイル名
  • Access acc = new Access();
    acc.ExecuteNoneQuery(sql);
    //データベースの復元
    string sql = “Alter Database qis2006 Set Offline with Rollback immediate;”;
    sql += “restore database qis2006 from disk = '” ;
    sql += Server.MapPath("").ToString() +"\";
    sql += bakname + “’”;//baknameはバックアップファイル名です
    sql += “Alter Database qis2006 Set OnLine With rollback Immediate;”;
    try
    {
    //masterデータベースに接続する;
    //sql文を実行する;
    Response.Write(“”);
    }
    catch(Exception ex)
    {
    Response.Write(“”);
    this.Label2.Text = ex.ToString();
    }
    (4)、ストレージプロセスケース
    //データベースのバックアップ
    create proc backup_database
    (
    @device_name varchar(80)–バックアップデバイス名
    @file_name varchar(125)--バックアップファイル名
    @devicelog_name varchar(85)–ログバックアップデバイス名
    @filelog_name varchar(130)--ログバックアップファイル名
    )
    as
    begin
    –データベースのバックアップ論理デバイスの作成
    exec sp_addumpdevice ‘disk’, @device_name ,@file_name
    –デバイス論理名の作成
    exec sp_addumpdevice ‘disk’, @devicelog_name, @filelog_name
    backup database testdb to @device_name--データベースのバックアップ
    backup log testdb to @devicelog_name--バックアップログ
    end
    //データベースの復元
    create proc restore_database
    (
    @device_name varchar(80),
    @devicelog_name varchar(85)
    )
    as
    begin
    Restore database testdb from @device_name
    Restore log testdb @devicelog_name
    end