Как я могу сделать резервную копию всей базы данных (SQL Server 2008) в коде C #? - PullRequest
1 голос
/ 22 июня 2010

У меня есть база данных на компьютере 1 (sql server 2008)

и у меня sql server 2008 на компьютере 2

Мне нужен любой пример кода в C #, который я могу сделать резервную копию базы данных на компьютере 1

до компьютер 2

заранее благодарен

Ответы [ 4 ]

1 голос
/ 22 июня 2010

Используйте команду BACKUP SQL и используйте UNC-путь в качестве выходного каталога. О том, как это сделать в C #, см. один из множества учебных пособий.

1 голос
/ 22 июня 2010

Вы можете выполнить запрос к БД, такой как:

BACKUP DATABASE [CCMData] TO  DISK = N'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\CCMData.bak' WITH NOFORMAT, NOINIT,  NAME = N'CCMData-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Обратите внимание, что вы можете получить код, зайдя в свою SQL Server Management studio, перейдите в меню резервного копирования для базы данных, которую вы хотитевосстановить, настроить его и непосредственно перед тем, как вы нажмете OK, посмотрите в верхней части меню, и вы увидите кнопку Script.Щелкните по нему, и он сгенерирует SQL-скрипт, который будет выполнять желаемое поведение.

0 голосов
/ 22 июня 2010

Я бы использовал SMO для создания резервных копий.Ниже приведен пример кода, который работает.

Вы можете добавить дополнительный код, который затем перемещает файлы резервных копий с компьютера 1 и помещает их на компьютер 2. Если компьютеру 2 нужны данные резервного копирования, включенные в базы данных, а не только файлы резервных копий, я бы посмотрел репликацию.Вы также можете выполнить операцию восстановления через SMO.Надеюсь, это поможет!

using System;
using System.IO;
using Microsoft.SqlServer.Management.Smo;

namespace BackupDatabases
{
    class Program
    {
        static void Main()
        {

            const string path = @"C:\Backups\";

             if (!Directory.Exists(path))
                Directory.CreateDirectory(path);

            Console.WriteLine("Enter Server name");
            string server = Console.ReadLine();

            Server sqlServer = new Server(server);


            foreach (Database db in sqlServer.Databases)
            {

                Backup bk = new Backup();

                bk.Devices.AddDevice(path, DeviceType.File);
                bk.Action = BackupActionType.Database;
                bk.BackupSetDescription = "Full backup of " + db.Name;
                bk.Database = db.Name;
                bk.Initialize = true;

                Console.WriteLine("Backing up database " + db.Name);

                bk.SqlBackup(sqlServer);

                Console.WriteLine();
                Console.WriteLine("Backup complete for database " + db.Name);

            }

        }

    }
}
0 голосов
/ 22 июня 2010

Я знаю, что ваш вопрос относится к C #, но я надеюсь, что, возможно, я немного углублюсь в ваш фактический вопрос. Если вы спрашиваете, как регулярно реплицировать данные с одного SQL-сервера на другой, я настоятельно рекомендую использовать SQL Server Replication. Если вам не нужна двусторонняя синхронизация, Snapshot Replication , вероятно, подойдет вам.

При репликации моментальных снимков: «Любые изменения, внесенные в данные репликации в целевом объекте, которые могли произойти с момента последней передачи, будут перезаписаны новой передачей» ( Ссылка ). Другими словами, если вы хотите просто передавать данные с одного сервера на другой либо по расписанию, либо по требованию, не учитывая изменений, внесенных в базу данных подписчика (пункт назначения), то это, вероятно, ваше наиболее выполнимое решение.

Однако, пожалуйста, просмотрите все доступные варианты и выберите тот, который лучше всего подходит для ваших нужд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...