sql >> データベース >  >> RDS >> Sqlserver

C#/ SQL:データベースファイルのコピーと置換によるバックアップと復元?

    解決策:

    まず、データベースファイルをコピーまたは置換する前に、データベースをオフライン状態に設定し、終了後にオンラインに戻す必要があることを知っておく必要があります。

    1)使用した方法

     // fullPath : the path for your database
     // executablePath : the path for your exe folder
    
        void setFullPath()
        {
            string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;
            executablePath = (System.IO.Path.GetDirectoryName(executable));
            fullPath = executablePath + "\\Database.mdf";
        }
    
        void takeOffline(string fullPath)
        {
            homeObject.connection.Open();
            homeObject.cmd.CommandText = "ALTER DATABASE [" + fullPath + "] SET OFFLINE";
            homeObject.cmd.ExecuteNonQuery();
            homeObject.cmd.Clone();
        }
    
        void bringOnline(string fullPath)
        {
            homeObject.cmd.CommandText = "ALTER DATABASE [" + fullPath + "] SET ONLINE"; ;
            homeObject.cmd.ExecuteNonQuery();
            homeObject.cmd.Clone();
            homeObject.connection.Close();
        }
    

    2)データベースファイルのコピー/バックアップ

      bool getDatabaseCopy()
        {
            try
            {
                //
                takeOffline(fullPath);
    
                // copy database.mdf
                copyDBMDF();
    
                // copy database_log.ldf
                copyDB_logLDF();
    
                //
                bringOnline(fullPath);
    
                return true;
            }
            catch
            {
                //
            }
    
            return false;
        }
    
        // txtPath.txt :
        // folder location to save database files in
    
        void copyDBMDF()
        {
            string fileName = "Database.mdf";
    
            string sourceFile = fullPath;
            string targetPath = txtPath.Text;
    
            // Use Path class to manipulate file and directory paths.
            string destFile = System.IO.Path.Combine(targetPath, fileName);
    
            // To copy a folder's contents to a new location:
            // Create a new target folder, if necessary.
            if (!System.IO.Directory.Exists(targetPath))
            {
                System.IO.Directory.CreateDirectory(targetPath);
            }
    
            // To copy a file to another location and 
            // overwrite the destination file if it already exists.
            System.IO.File.Copy(sourceFile, destFile, true);
        }
    
        void copyDB_logLDF()
        {
            string fileName = "Database_log.ldf";
    
            string sourcePath = executablePath;
            string targetPath = txtPath.Text;
    
            // Use Path class to manipulate file and directory paths.
            string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
            string destFile = System.IO.Path.Combine(targetPath, fileName);
    
            // To copy a folder's contents to a new location:
            // Create a new target folder, if necessary.
            if (!System.IO.Directory.Exists(targetPath))
            {
                System.IO.Directory.CreateDirectory(targetPath);
            }
    
            // To copy a file to another location and 
            // overwrite the destination file if it already exists.
            System.IO.File.Copy(sourceFile, destFile, true);
        }
    

    3)現在のデータベースファイルをコピー/復元したファイルに置き換えます

      bool restoreTheBackup()
        {
            try
            {
                //
                takeOffline(fullPath);
    
                // load .mdf
                loadMDFDatabaseFile();
    
                // load _log.ldf
                loadLDFDatabaseFile();
    
                //
                bringOnline(fullPath);
    
                return true;
            }
            catch
            {
                //
            }
    
            return false;
        }
    
    // txtPath.txt :
    // location to get database files from to replace with current files.
    
        void loadLDFDatabaseFile()
        {
            string fileName = "Database_log.ldf";
    
            string targetPath = executablePath;
            string sourcePath = txtPath.Text;
    
            // Use Path class to manipulate file and directory paths.
            string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
            string destFile = System.IO.Path.Combine(targetPath, fileName);
    
            // To copy a folder's contents to a new location:
            // Create a new target folder, if necessary.
            if (!System.IO.Directory.Exists(targetPath))
            {
                System.IO.Directory.CreateDirectory(targetPath);
            }
    
            // To copy a file to another location and 
            // overwrite the destination file if it already exists.
            System.IO.File.Copy(sourceFile, destFile, true);
        }
    
        void loadMDFDatabaseFile()
        {
            string fileName = "Database.mdf";
    
            string targetPath = executablePath;
            string sourcePath = txtPath.Text;
    
            // Use Path class to manipulate file and directory paths.
            string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
            string destFile = System.IO.Path.Combine(targetPath, fileName);
    
            // To copy a folder's contents to a new location:
            // Create a new target folder, if necessary.
            if (!System.IO.Directory.Exists(targetPath))
            {
                System.IO.Directory.CreateDirectory(targetPath);
            }
    
            // To copy a file to another location and 
            // overwrite the destination file if it already exists.
            System.IO.File.Copy(sourceFile, destFile, true);
        }
    



    1. 配列が50要素を超えない場合、PostgreSqlで配列フィールドタイプの代わりにテーブルを使用する方が良いですか?

    2. Flaskでconnection.commit()を呼び出した後、MySQLが更新されない(動作中)

    3. ボトル、SQLAlchemy、TwitterAPIを使用したシンプルなWebアプリの構築

    4. PythonMySQLDBIN句で使用するためのリストの実装