Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Копирование самой базы данных


Автор: agealex 1.11.2008, 18:05
Visual studio 2008 Framework2
база данных  Interbase 7

Нужно скопировать базу данных целиком, как это сделать? , как файл перекопировать не получается так как он используется. Подскажите люди добрые

Автор: elbjarn 1.11.2008, 22:50
не знаю, как это делается в interbase, но в ms sql для этого достаточно сделать бэкап базы, а потом восстановить ее на другом сервере. может и в interbase схожий алгоритм, посмотрите в сторону бэкапов/восстановления.

Автор: archeg 2.11.2008, 02:08
Цитата(agealex @ 1.11.2008,  18:05)
Visual studio 2008 Framework2
база данных  Interbase 7

Нужно скопировать базу данных целиком, как это сделать? , как файл перекопировать не получается так как он используется. Подскажите люди добрые

Есть специальные утилиты (гугл ;)) которые умеют конвертить из любой базы в любую, да еще и делают это все селектами (т.е. базу деаттачить не нужно). В основном платные, но можно скачать и триал )


Если же нужно кодом - то это сложнее. Выбираешь ddl, строишь ее на другом сервере, потом делаешь селекты - инсерты (или балк инсерты).....

Автор: MasterOfCode 2.11.2008, 20:36
Для Interbase существует создание бэкапов, сначала создаешь бэкап, а потом на другой машине его разворачиваешь.

Автор: archeg 3.11.2008, 15:36
Если не ошибаюсь, при востановлении базы с бекапа ее нужно деаттачить, я так понял автару это не подходит. В крайнем случае база точно не работает некоторое время

Автор: MasterOfCode 3.11.2008, 22:22
А как по другому? Полюбому придется деаттачить. Хотя я не знаю существует ли в Interbase создание горячих бэкапов. ИМХО тему в БД нужно перевести!

Автор: agealex 5.11.2008, 11:16
Как я понял :

Существует 3 варианта:

1. Кодом селекты и инсерты
2. Бекапом базы данных отсоединяя ее
3. Используя утилитку какую нить.

В моем случае лучше остановиться на варианте кода smile 

Основное условие это временное.

Копирование происходит на различные носители, с уже существующими и еще не существующими базами данных.

Хотелось бы поподробнее узнать про механизм копирования кодом smile

Автор: MasterOfCode 5.11.2008, 12:41
Цитата(agealex @  5.11.2008,  14:16 Найти цитируемый пост)
1. Кодом селекты и инсерты

Это по моему и есть "горячие бэкапы". smile
Цитата(agealex @  5.11.2008,  14:16 Найти цитируемый пост)
Хотелось бы поподробнее узнать про механизм копирования кодом

Создавайте новую тему, и лучше http://forum.vingrad.ru/forum/Interbase-database.html. И назовите как нибудь получше.

Добавлено через 2 минуты и 48 секунд
Или воспользоваться поиском, вот например есть http://forum.vingrad.ru/forum/topic-83419/unread-1/hl/%25D0%25B1%25D1%258D%25D0%25BA%25D0%25B0%25D0%25BF/index.html.

Автор: Idsa 5.11.2008, 12:44
Цитата(MasterOfCode @  5.11.2008,  16:41 Найти цитируемый пост)
Это по моему и есть "горячие бэкапы". smile

Нет.

Автор: agealex 7.11.2008, 15:10
Цитата

Создавайте новую тему, и лучше тут. И назовите как нибудь получше.

Ну насчёт перевода этой темы в другой раздел я не согласен так как вопрос относится к вопросам кодирования а не какой утилиткой лучше это сделать. 
а насчёт названия согласен слово "самой" - лишнееsmile

Автор: MasterOfCode 7.11.2008, 15:13
Цитата(agealex @  7.11.2008,  17:10 Найти цитируемый пост)
какой утилиткой лучше это сделать

 smile  Что ты имеешь ввиду? 
Возможно скажу что то новое, но средствами C# вам не решить этой проблеммы. По крайней мери если "штаны через голову не одевать".  smile 

Автор: agealex 7.11.2008, 15:16
Средствами С# вполне решаема, используя dll от Firebird  для C#  вполне, простой селект и инсерт. Единственное что смущает это  время необходимое для копирования базы размером 10 Гб, по крайней мере содержимое все этой базы я вынуть могу, а скопировать его уже куда то -
то другой вопрос, собственно который я и хотел узнать smile

Автор: agealex 18.11.2008, 11:37
В общем сам ступил длл от Firebird для работы со студией позволяет избежать все эти проблемы http://firebirdsql.org/dotnetfirebird/documentation/api/1.7/index.html, тут описание ее методом и классов. Единственным минусом является указание размера базы, а так как оно закрыто на чтение приходится использовать класс FileInfo
Код

 try
            {
                FbConnectionStringBuilder cs = new FbConnectionStringBuilder();

                FileInfo Info =  new FileInfo(@"Database= " + DateBasePath + @"\TEST6.GDB");
                String FileSize = Info.Length.ToString();
                FileSize = FileSize.Substring(0, FileSize.Length - 3);//так как оно в байтах а надо в килобайтах
                cs.UserID = "SYSDBA";
                cs.Password = "masterkey";
                cs.Database = @"C:\SharedAlex\TEST6.GDB";

                FbBackup backupSvc = new FbBackup();

                backupSvc.ConnectionString = cs.ToString();
                backupSvc.BackupFiles.Add(new FbBackupFile(@"c:\testdb2.gbk", Convert.ToInt32( FileSize)));
                backupSvc.Verbose = true;

                backupSvc.Options = FbBackupFlags.IgnoreLimbo;


                backupSvc.Execute();
              }
            catch (Exception c)
            {
 
            }

\
             
            }
            catch(Exception ex)
            {
            }
 

В общем так все работает

Добавлено через 40 секунд
В общем сам ступил длл от Firebird для работы со студией позволяет избежать все эти проблемы http://firebirdsql.org/dotnetfirebird/documentation/api/1.7/index.html, тут описание ее методом и классов. Единственным минусом является указание размера базы, а так как оно закрыто на чтение приходится использовать класс FileInfo
Код

 try
            {
                FbConnectionStringBuilder cs = new FbConnectionStringBuilder();

                FileInfo Info =  new FileInfo(@"Database= " + DateBasePath + @"\TEST6.GDB");
                String FileSize = Info.Length.ToString();
                FileSize = FileSize.Substring(0, FileSize.Length - 3);//так как оно в байтах а надо в килобайтах
                cs.UserID = "SYSDBA";
                cs.Password = "masterkey";
                cs.Database = @"C:\SharedAlex\TEST6.GDB";

                FbBackup backupSvc = new FbBackup();

                backupSvc.ConnectionString = cs.ToString();
                backupSvc.BackupFiles.Add(new FbBackupFile(@"c:\testdb2.gbk", Convert.ToInt32( FileSize)));
                backupSvc.Verbose = true;

                backupSvc.Options = FbBackupFlags.IgnoreLimbo;


                backupSvc.Execute();
              }
            catch (Exception c)
            {
 
            }

\
             
            }
            catch(Exception ex)
            {
            }
 

В общем так все работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)