Форум: "Прочее";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
ВнизЧастичный Backup БД Найти похожие ветки
← →
Kostafey © (2006-12-15 23:14) [0]Доброго времени суток ! Хочу сделать бэкап/восстановление не всей БД, а только некоторых ее таблиц.
Вопрос глупый. Помидорами в голову не кидать (я в шлеме).
СУБД MS SQL Servetr 2005 для тех кто еще не знает ;) (уже задавал ряд подобных ламерских вопросов)
← →
tesseract © (2006-12-15 23:17) [1]сохраняй в XML :-)
кто мешает восстановить?
← →
Kostafey © (2006-12-15 23:22) [2]
> [1] tesseract © (15.12.06 23:17)
Вообще-то я до этого с MySQL работал, так что при желании наверное, вручную сделал бы бэкап
в тот же SQL (большой текстовй файл с сотнями insert()...)
Но наверное, для MS SQL Server это уже не рационально.
Возможно, SQL-команда есть для частичного бэкапа или другой какой-то механизм ?
← →
Kostafey © (2006-12-16 00:23) [3]> сохраняй в XML :-)
А вообще ведь наверняка есть готовые решения для сохранения/восстановления БД из XML.
Не подскажите где можно посмотреть ?
Как известно, велосипед интересно изобретать только первый раз.
← →
Ученик чародея © (2006-12-16 00:34) [4]пишеш список таблиц.
Далее в Delphi через Query в snapshot транзакции(чтобы даные не изменялись) используя
select * from таблица получаешь список полей и количество записей импортирешь в xml.
Это если руками.
Если чужим софтом, то Делфиский DataPump или что-то более серьезное.
← →
Ученик чародея © (2006-12-16 00:36) [5]DBArtisan
http://www.softbcom.ru/catalog.asp?ob_no=389
← →
sniknik © (2006-12-16 01:20) [6]> Не подскажите где можно посмотреть ?
в BOL естественно. для использующих MSSQL это как библия для верующих.
OPENXML, BULK INSERT, OPENROWSET, OPENDATASOURCE, Data Link
способов перебросить данные в другую базу/формат хватает, вовсе не обязательно икать чтото "левое".
> Далее в Delphi через Query в snapshot транзакции(чтобы даные не изменялись) используя
> select * from таблица получаешь список полей и количество записей импортирешь в xml.
> Это если руками.
все гораздо проще, открываеш запрос ADODataSet.Open; с нужной выборкой и сохраняеш в XML ADODataSet.SaveToFile(xxx, pfXML);
но это, имхо, не самый лучший формат для бэкапа. я бы лучше перебросил нужное(разделил) в другую, тоже MSSQL-вскую базу, и сделал бы ей нормальный полный бэкап.
← →
Kostafey © (2006-12-18 21:53) [7]Возвращаюсь к этому вопросу.
> но это, имхо, не самый лучший формат для бэкапа. я бы лучше
> перебросил нужное(разделил) в другую, тоже MSSQL-вскую базу,
> и сделал бы ей нормальный полный бэкап.
Да, идея мне понравилась. Решил попробовать ее реализовать. Но вот с какой проблемой столкнулся.
Как скопировать данные из таблицы одной БД в таблицу (аналогичной по структуре) другой БД.
Реализовал я это так:
1) Создается новая (временная) БД
2) Создаются таблицы во временной БД со труктурой аналогичной таблицам подлежащми бэкапу.
3) Сотдаются переменные типа таблица со труктурой аналогичной таблицам подлежащми бэкапу.
4) Данные копируются из таблиц исходной БД и таблицы-перемеммые
5) Данные копируются из таблиц-переменных в втаблицы временной БД
6) Выполняется бэкап временной БД
7) Временная БД удаляется.
Для частичного восстановления - аналогичный обратный алгоритм
Думаю, что в условиях реальной эксплуатации цепочка этих операций будет повторяться не чаще чем раз в 0,5-1 год.
У меня копия рабочей версии БД (суммарное количество записей сохраняемых таблиц не более 2500) - время выполнения не превышает 1 мин.
Хотел бы выслушать конструктивную критику по данному вопросу и ваши предложения по улучшению алгоритма бэкапа.
И еще хотел спросить: таблицы-переменные нужно специальным образом удалять или это происходить при завершении работы SQL-команды ?
← →
Kostafey © (2006-12-18 22:56) [8]И еще вопрос. Для того чтобы отличать разные бэкапы (всей БД или ее части) что можно использовать ?
Есть следующее соображение.
При запросе на создание бэкапа пишестся название бэкапа:ADOQuery1.SQL.Text :=
"BACKUP DATABASE [" + DataBaseName + "] TO DISK = N""" + SaveDialog1.FileName + """ WITH NOFORMAT, " +
"INIT, NAME = N""Gar-Full Database Backup"", SKIP, NOREWIND, NOUNLOAD, STATS = 10";
(в примере Gar-Full Database Backup), а можно ли прочитать это название до начала процесса восстановления БД ?
← →
Kostafey © (2006-12-19 00:13) [9]Кхе-кхе. Может кто-нибудь обратит на меня внимание ?
← →
Kostafey © (2006-12-19 20:53) [10]Is anybody here ?
← →
User_Name (2006-12-19 21:20) [11]ИМХО все это "BACKUP DATABASE ...." надо в SP на сервер. А уже из клиента только "дергать" ее в нужное время.
← →
Kostafey © (2006-12-19 21:36) [12]SP - хранимая процедура ?
Я понял. Сложность в том, что БД, да и вся АРМ эксплуатируется в другом городе и за состоянием БД разрабочтики явно не уследят
(все это - на откуп местным программистам). Производительность для текущих объемов достаточная.
Хорошо, а с точки самой организации кода и про [8] что скажете ?
← →
User_Name (2006-12-19 21:51) [13]Скажу как админ :) а не программист. Делается хранимая продцедура типа (часть кода типа проверок отключена и т.п.)
...
@base_name Varchar(20)
AS
DECLARE @sname varchar(255)
DECLARE @s_file_name varchar(255)
DECLARE @stroka varchar(255)
--инициализируем данную переменную
SET @s_file_name= CONVERT(varchar(8),GetDate() ,112) + @base_name+".BAK"
Set @sname = "\\удаленный сервер\" + @s_file_name
--Если устройство присутствует в системе то следовательно удалить его
if Exists (select * from master..sysdevices where name = "NET")
EXEC master..sp_dropdevice "NET"
--производим подключение удаленного ресурса
EXEC master..sp_addumpdevice "Disk", "NET" , @sname
--Копирование на удаленное хранилище
SET @stroka ="BACKUP DATABASE ["+@base_name+
"] TO [NET] WITH INIT ,NOUNLOAD , NAME = N"""+@base_name+
""", NOSKIP , STATS = 10, NOFORMAT"
exec(@stroka)
....
и делаем job - 1 раз в сутки. И ВСЕ.
← →
Kostafey © (2006-12-19 22:10) [14]> [13] User_Name (19.12.06 21:51)
Спасибо, но суть вопроса не в этом.
У меня (думаю, в том чиисле и у других разработчиков проекта) нет доступа к непосредственно экспуатируемой БД.
Обмен информацмей ? Чуть ли не диски по почте посылают !
Потом АРМ будет внедряться в другом регионе. Мне нужно просто свою задачу сделать так, чтобы он минимально соприкасался
с задачами других разработчиков. Проектирование, модификация БД - не моя задача, хотя пару слов (ласковых) я в итоге, пожалуй скажу,
вот почему я хочу, чтобы приложения были "сами в себе", т.е. сознательно стремлюсь не применять хранимые процедуры.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.015 c