Sqlserver
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Периодични проблеми с производителността на функцията на SQL Server

  2. SQL Server Resumable Index:Добре ли е за вас?

  3. Как да създам стъпка в моята задача за агент на SQL Server, която ще изпълнява моя SSIS пакет?

  4. CTE използват ли място в tempdb?

  5. Индекси на SQL Server:Ключови изисквания, въздействие върху производителността и съображения