Просмотр полной версии : Бесплатная СУБД!
Стала задача в выборе бесплатной СУБД. Так как на платную денег нет. Но есть одна загвоздка... Есть старая база с расширением *.mdf, и её бэкап с расширением *.bak(c MSSQL 2005). Её надо поднять на новой СУБД. Вчера пробовал PostgreSQL, но как я понял она не может восстановить базу из бэкапа MSSQL так пишет что "неверный заголовок в архиве". Да и расширение родное у PostgreSQL *.backup а не *.bak. Кто что может посоветовать? СУБД должна держать до 50 пользователей, и не сильно нагружать сервак. Размер базы 1gb.
CHIM.86, а MySQL не катит?
Напрямую подсунуть бэкап одной СУБД в другую не получится. Никогда.
Нужно делать через экспорт-импорт, выбирая формат данных, который понимают обе СУБД.
В MS SQL Server для этого есть Data Transformation Services (DTS)
CHIM.86, а MySQL не катит?
А ещё есть Firebird
А для чего такие муки? Переносить надо только данные, или всю архитектуру? Есть клиентское приложение работающее с базой? Распишите проблему поподробнее.
СУБД должна держать до 50 пользователей
Т.е. клиентов сети!
Перенести нужно всю базу целиком, и причём не одну.
А на счёт MySql я попробую. Спасибо за совет.
Только появилась одна проблемка...
При попытке экспорта базы из MS SQL выскакивает следующая ошибка:
The SSIS Runtime object could not be created. Verify that DTS.dll is available and registered. The wizard cannot continue and it will terminate. (SQL Server Import and Export Wizard)
===================================
Невозможно привести COM-объект типа "Microsoft.SqlServer.Dts.Runtime.Wrapper.PackageNeu tralClass" к интерфейсному типу "Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSContai ner90". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{8BDFE892-E9D8-4D23-9739-DA807BCDC2AC}" возвратил следующую ошибку: Библиотека не зарегистрирована. (Исключение из HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)). (Microsoft.SqlServer.DTSRuntimeWrap)
Как я понял не зарегестрирована библиотека DTS.dll.
Как это исправить?
CHIM.86,
Вопрос в том, что содержит база, какова её архитектура (используются триггеры, хранимые процедуры, функции, вьюхи), база существует сама по себе, или её использует для работы приложение (программа, сайт)?
База написана группой программистов которые в свою очередь поставили нам программное обеспечение(разработанное ими же) работающее с этой базой данных.
А так как я только начал в это вникать я не могу ответить на вопрос про триггеры, хранимые процедуры и т.д.
А так как я только начал в это вникать я не могу ответить на вопрос про триггеры, хранимые процедуры и т.д.
К сожалению, без вникания в эти вещи, работу, упомянутую в первом посте, выполнить невозможно.
CHIM.86,
Кроме этого надо понять будут ли работать клиентские приложения с другими базами данных, есть ли в них движок способный с ними работать. И чем плох MS SQL Server?
Doctor,
+1, или это адский труд
Cyborg5022
18.03.2009, 18:01
А бесплатная облегченная версия MS SQL не подходит?
Кстати, это - наиболее реалистичный вариант...
SQL Server Express Edition
Microsoft SQL Server Express является бесплатно распространяемой версией SQL Server. Данная версия имеет некоторые технические ограничения, указанные ниже (речь идёт о версии MS SQL Express 2005). Такие ограничения делают её непригодной для развертывания больших баз данных, но вполне годится для ведения продуктов класса "1С-предприятие" и серьёзных программных комплексов в масштабах небольшой компании. Содержит полноценную поддержку новых типов данных, в т.ч. XML-спецификации. Фактически, это полноценный MS SQL Server, включая все его компоненты программирования, поддержку национальных алфавитов и Unicode. Поэтому используется в приложениях, при проектировании или для самостоятельного изучения. Нет никаких препятствий для дальнейшего развёртывания накопленной базы данных на MS SQL Server неэкспрессной версии. В 2007 году Microsoft выпустила отдельную утилиту с графическим интерфейсом для администрирования данной версии, которая также доступна для бесплатного скачивания с сайта корпорации.
[править] Ограничения SQL Server Express Edition
* 1 поддерживаемый процессор (но может быть установлен на любой сервер)
* 1 Гб адресуемой памяти
* 4 Гб максимальный размер базы
Распространено ошибочное мнение, что у данной версии продукта имеется ограничение на количество одновременных подключений к серверу. Иногда встречается и такое же ошибочное мнение, что версия якобы вообще ограничена для локальной работы. На самом деле, такого ограничения нет как и не было его уже в MSDE2000, который из-за морального старения с момента выхода SQL Server 2005 Express Edition компанией Microsoft уже не поддерживается.
Если Вас это устраивает, то это лучший вариант и самый менее геморройный.
Спасибо огромное за то что откликнулись и дали дельные советы.
На счёт Microsoft SQL Server Express Edition. Я бы с удовольствием... Но так как у меня не одна база. То некоторые из них превышают 4gb.
А на счёт ошибки мне кто нибудь может ответить?
Добавлено через 2 минуты 23 секунды
Doctor,
+1, или это адский труд
Нет. Совсем не адский! Просто я только начал разбираться с базой, а как известно в чужих трудах сложнее разбираться чем в своих. По этому мне нужно время и бесплатная СУБД.
Добавлено через 9 минут 43 секунды
Кроме этого надо понять будут ли работать клиентские приложения с другими базами данных, есть ли в них движок способный с ними работать. И чем плох MS SQL Server?
Нет. Клиентские приложения будут работать только с одной базой. А на счёт MS SQL... Платную нельзя, а бесплатная не подходит.
CHIM.86, не с того Вы начинаете.
Клиентские приложения, как правило, рассчитаны на работу только с одной СУБД - с той, под которую они писались - именно об этом Вам пытался сказать BadHare.
Кроме того, сами приложения могут содержать в своём коде запросы к базе данных, а вовсе не обязательно, что все они будут выполнены в виде хранимых процедур и лежать на сервере.
Как известно, диалекты языка SQL у разных СУБД сильно различаются.
Поэтому, для решения данной задачи, скорее всего, придётся не только делать трансформацию данных, а и портировать запросы с одного диалекта SQL на другой. Причём, скорее всего, менять для этого и клиентские приложения - что вряд ли будет возможно сделать без их исходных текстов.
Doctor,
Ну если в приложении использует ANSI SQL, без специфических операторов TSQL, то приложение еще может и не увидеть разницы при работе с другой базой данных, но проблема может возникнуть в типе подключения (ODBC, ADO, и т.д.). Так что тут куча подводных камней.
А про перенос серверной части (касаемо хранимых процедур, функций, и триггеров) то будут 100% проблемы с MySQL (ниже 5 версии, хотя и с 5 тоже) и postgresql тоже, т.к. их функционал заметно меньше нежели чем на TSQL. На мой взгляд тогда остается два варианта - это FireBird или MS SQL Express. ИМХО
Ну если в приложении использует ANSI SQL, без специфических операторов TSQL
Это - да, но лично мне таких не попадалось...
сейчас очень мало кто думает о переносимости ПО во время его создания...
Doctor,
Я думаю :)
Это нормальная практика создания релиционных баз данных, когда приложение и сервер прозрачны друг для друга и являются некими черными ящиками со входными и выходными параметрами. Для этого и создавались хранимые процедуры и прочие приблуды на серверной части, чтобы разделить клиентскую и серверную части. Так правильно, но гарантировать что так делают все не буду :)
Тем более задача усложняется тем, что у человека несколько баз данных и несколько приложений которые работают с ними.
Добавлено через 2 часа 20 минут 51 секунду
Как вариант использования MS SQL Express, это выполнить команду DBCC SHRINKDATABASE (database name), она уменьшит физический объем базы данных.
SHRINK я уже делал. До SHRINK база весила 47 GB.
Про ошибку видимо никто не знает.... Жаль.
У меня такой ошибки не было, почему это могло произойти - не знаю.
Судя по тому, что написано здесь:
Verify that DTS.dll is available and registered
- надо убедиться в наличии в системе файла DTS.dll и попробовать его зарегистрировать командой
regsvr32.exe DTS.dll
Не вышло.
При попытке зарегистрировать библиотеку выскакивает ошибка. 0х8007005.
Так рисунки не вставляются.
Надо разместить картинку на хостинге и дать на неё ссылку.
А проще - напишите сюда, что там на ней написано (думаю - это наверно скриншот?)
на рисунке была ошибка "0х8007005."
В общем скачал я Esxpress 2005. Ребята написали свой SHRINK и после него база стала размером 1 GB. Базы подкинул. Но! Есть проблема. Я столкнулся с тем что не нашёл в стандартном наборе службу клиента, которая отвечает за выполнение заданий по расписанию. Может это поставляется отдельно? Если да то может кто нибудь подскажет где можно скачать?
В общем скачал я Esxpress 2005
А зачем это старьё? Давно пора уже 2008 юзать:
http://go.microsoft.com/?linkid=9394724 http://www.microsoft.com/express/sql/download/
Например, там есть вот такое чудо:
"Хранилище FILESTREAM объединяет компонент SQL Server Database Engine с файловой системой NTFS, размещая данные больших двоичных объектов (BLOB) типа varbinary(max) в файловой системе в виде файлов."
http://msdn.microsoft.com/ru-ru/library/bb933993.aspx
Т.е. и 4ГБ базы может по уши хватить, если размещать BLOB-ы не в самой базе, а на NTFS...
Добавлено через 18 минут 48 секунд
Я столкнулся с тем что не нашёл в стандартном наборе службу клиента, которая отвечает за выполнение заданий по расписанию.
Имеется в виду агент?
SQL Server 2008 Express SQL Agent won't start
Yep, you read that right. I did say SQL Server 2008 Express SQL Agent, and so will your services snapin if you install SQL Server 2008 Express, but you won't be able to use it. Apparently there was some miscommunication/ lack of communication at Microsoft regarding the installation of SQL Agent with SQL Express, and the result is a disable SQL Agent Service that won't start no matter what you try to do. This is documented in the following connect feedback:
https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=351806&wa=wsignin1.0
If you attempt to start the service you will receive the following error message:
The service cannot be started, either because it is disabled or because it has no enabled devices associated with it. [0x80070422]
and trying to enable the service to start automatically will result in:
The request is not supported. [0x80070032]
This is by design according to the connect response from Microsoft, though it is not the ideal situation and is certain to cause a lot of confusion in the community. If you want to use the SQL Agent, you need to install one of the pay versions of SQL Server. You can still however, use sqlcmd.exe, batch files, and the Windows Task Scheduler to replace the SQL Agent free, or for a lot less than the cost of a single license for SQL Standard hope over to the SQL Sentry site, and purchase a copy of SQL Sentry Event Manager.
Now I will be quite honest and say that I haven't yet tried the Event Manager, but SQL Sentry has a great reputation for creating top quality applications and comes highly recommended by colleagues that I trust and respect.
http://jmkehayias.blogspot.com/2009/01/sql-server-2008-express-sql-agent-won.html
Ну почему же сразу старьё? Я например не рискнул бы называть проверенный и более или менее стабильный продукт старьём.
А на счёт выбора... Просто посмотрел здесь:
http://www.vectorinfo.ru/library/SQL-server/sql2005.php
и здесь:
http://www.vectorinfo.ru/library/SQL-server/sql2008.php
И решил что мне вполне хватит Express 2005.
На счёт Shrinka и Backup, я разобрался. Просто написал батники и закинул в программку Cobian Backup. Там она и батники выполняет и бэкапы архивирует. Меня это вполне устраивает.
Спасибо всем кто откликнулся!
Ну почему же сразу старьё?
А почему собственно нет?
Я например не рискнул бы называть проверенный и более или менее стабильный продукт старьём.
Как одно связано с другим? Так можно и 2000-й и ещё более старые версии назвать (think) Или у Вас есть данные, согласно которым SQL 2008 криво работает? Она всё-таки не вчера вышла...
Не вижу никакого смысла ставить более старую версию - в ней меньше фич (вдруг что понадобится в будущем - миграцию, апгрейд затевать?), она менее производительна, тем более, что она не менее бесплатна. Ладно бы уже стояла и работала и трогать не хочется лишний раз, так ведь всё равно ставить. Не вижу никаких доказательств преимуществ 2005-й над 2008-й версией. Впрочем хозяин-барин - Вам работать с этим, Вам выбирать...
Добавлено через 5 минут 29 секунд
...Не вижу никаких доказательств преимуществ 2005-й над 2008-й версией на указанных ссылках... ("А на счёт выбора... Просто посмотрел здесь")
"И решил что мне вполне хватит Express 2005"
Так и предыдущей версии может тоже хватить... Все одинаково бесплатны. А 2008 будут дольше поддерживать - хотя бы такой чем не аргумент? 8-)
CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT ]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { <sql_statement> [;][ ...n ] | <method_specifier> }
[;]
<procedure_option> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE_AS_Clause ]
<sql_statement> ::=
{ [ BEGIN ] statements [ END ] }
<method_specifier> ::=
EXTERNAL NAME assembly_name.class_name.method_name
И оппа
; number
Необязательное целое число, используемое для группировки процедур с одним и тем же именем. Все сгруппированные процедуры можно сбросить, выполнив одну инструкцию DROP PROCEDURE. Например, в приложении orders можно было бы использовать процедуры с именами orderproc;1, orderproc;2 и т. д. Инструкция DROP PROCEDURE orderproc удалила бы все процедуры из этой группы. Если имя содержит идентификаторы с разделителями, номер не должен быть частью идентификатора; следует выделять при помощи подходящего разделителя только procedure_name.
На пронумерованные хранимые процедуры распространяются следующие ограничения.
В качестве типов данных для таких процедур нельзя использовать тип xml и пользовательские типы данных среды CLR.
Для пронумерованной хранимой процедуры нельзя создать руководство плана.
Примечание.
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.
chaynik, Что делать в этом случае?
И это скорее всего не все!!! Пример взят из хелпа 2005 сикула.
А мне CLR необходима так как этого требует программа!
Я слышал про какие то глюки 2008 sql но не могу их озвучивать поскольку это возможно только слухи. Но я знаю точно одно. 2005 меня ничем не обидел и не обделил. Да и весит он всего ничего.
Работает как часы. Да и ладно.
CHIM.86,
Так Я про это и писал, 2008 sql не может работать с группированными процедурами (судя по хелпу 2005), и что делать если на сервере они есть, и их использует клиентское приложение. Так что никакой необходимости для перехода на новую версию сикула - НЕТУ. И кто дает гарантию преемственности, без правки базы и прочего? Зачем ломать то что и так работает...
BadHare, +1
Это я и пытался сказать! От добра добра не ищут!
Добавлено через 6 минут 29 секунд
Теперь у меня следующая проблемка. Выкопал один батник по созданию дампов, подправил его под себя. Дампы он днлает хоть и с расширением *.db но всё же sql их видит и нормально читает. Но проблема в другом. Если поставить чтобы дамп создавался каждый день, то он просто добавляет в тот же самый файл, а мне надо что бы делал разными файлами за каждый день. Может кто чё подскажет.... Вот мой батник:
@echo off
set SQLSERVER=sqlserver
set ISQL=E:\Program Files\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE
set BACKUP=D:\MsSQL\damp
set LOG=D:\MsSQL\damp\LOG
set DAYS=3
rem Set PATH01=
rem Set PATH02=
rem Директория в которой будет создан SQL скрипт
set temp=C:\temp
rem Считывание названий баз из файла Bases.txt
for /F "eol=; tokens=1 delims=," %%i in (D:\MsSQL\damp\Bases.txt) do (
set Database=%%i
call :BackUp)
goto :EOF
:BackUp
rem Проверки
IF NOT EXIST "%ISQL%" (echo Microsoft SQL Server Command Line Tool "%ISQL%" не найден!
echo change the value ISQL in the batch!
goto :EOF)
IF NOT EXIST "%BACKUP%" (echo Каталог бэкапов "%BACKUP%" не найден!
echo change the value BACKUP in the batch!
goto :EOF)
rem if NOT '%PATH01%'=='' (IF NOT EXIST "%PATH01%" (echo Каталог бэкапов "%PATH01%" не найден!
rem echo Поправьте значение переменной PATH01 в командном файле!
rem echo %date% %time% Поправьте значение переменной PATH01 в командном файле! >> %LOG%\backup_log.txt
rem set PATH01=)
rem )
rem if NOT '%PATH02%'=='' (IF NOT EXIST "%PATH02%" (echo Каталог бэкапов "%PATH02%" не найден!
rem echo Поправьте значение переменной PATH02 в командном файле!
rem echo %date% %time% Поправьте значение переменной PATH02 в командном файле! >> %LOG%\backup_log.txt
rem set PATH02=)
rem )
for /f "tokens=1-4 delims=. " %%i in ('date /t') do set longdate=%%i%%j%%k
set FileName=%longdate:~0,2%_%longdate:~2,2%_%longdate :~4,4%
rem дата в формате 2003_04_12
echo Date: %FileName%
echo SQL Server: %SQLServer%
echo DataBase: %Database%
echo.
echo 1. Создание резервной копии...
set ArcSQL=%temp%\arcsrv.sql
echo USE master > %ArcSQL%
echo EXEC sp_addumpdevice 'disk', '%Database%_Backup', '%BACKUP%\%Database%_%FileName%.bak' >> %ArcSQL%
echo BACKUP DATABASE %DataBase% TO %Database%_Backup >> %ArcSQL%
rem ============================= echo exec sp_dropdevice '%Database%_Backup' >> %ArcSQL%
"%ISQL%" -E -S %SQLServer% -d master -i %ArcSQL% -n -o %log%\log_autobackupsql_%Database%.txt
echo.
echo backup accomplished
:EOF
CHIM.86,
можно в строке echo EXEC sp_addumpdevice 'disk', '%Database%_Backup', '%BACKUP%\%Database%_%FileName%.bak' >> %ArcSQL%
заменить %Database%_%FileName%.bak на %Database%_%FileName%_%Date%.bak
или средствами самого SQL без хранимой процедуры
Пример:
set DIR_BACKUP=C:\\backupMSSQL_%date%
set NAME_PC=<Имя ПК>
md %DIR_BACKUP%
osql -S %NAME_PC% -E -Q "BACKUP DATABASE <Имя базы> TO DISK = '%DIR_BACKUP%\<Имя базы>.bak' with init"
так наверное поинтереснее будет
http://msdn.microsoft.com/ru-ru/library/ms186865(SQL.90).aspx
вообще почитай, бэкапы можно делать не только кумулятивные, но и срезы по транзакциям (разностное).
Добавлено через 33 минуты 11 секунд
Еще ...
просто супер вариант
declare @Path varchar(1000)
set @Path = '<путь куда сохранять>' + convert(varchar(8),GetDate(),112) + '.bak'
BACKUP DATABASE [Apparat] TO DISK = @Path ... <нужные параметры для бэкапа>
все это подпихиваем в osql
можно этот запрос хранить в файле
и вызывать его osql -E -i <имя файла>.qry
Большое спасибо! Буду пробовать.
CHIM.86,
Упс ... попалился :)
declare @Path varchar(1000)
set @Path = '<путь куда сохранять>' + convert(varchar(8),GetDate(),112) + '.bak'
BACKUP DATABASE [Имя Базы] TO DISK = @Path ... <нужные параметры для бэкапа>
все это лучше сохранить в файлик и запускать через osql.
Ничё страшного.:)
Добавлено через 39 минут 0 секунд
можно в строке echo EXEC sp_addumpdevice 'disk', '%Database%_Backup', '%BACKUP%\%Database%_%FileName%.bak' >> %ArcSQL%
заменить %Database%_%FileName%.bak на %Database%_%FileName%_%Date%.bak
Это к сожалению не прокатило...
Кстати не могу понять почему этот батник делает файл с расширением *.db...???
CHIM.86,
Почему ?
%Date% - это команда текущей даты.
Попробуй без процедуры dump'а, напрямую пиши
BACKUP DATABASE [Имя Базы] TO DISK = @Path ... <нужные параметры для бэкапа>
Попробуй способом на SQL, для начала на osql выполни
declare @Path varchar(1000)
set @Path = '<путь куда сохранять>' + convert(varchar(8),GetDate(),112) + '.bak'
select @Path
таким образом проверишь путь
Т.е. если я правильно понял.... Делаем следующее:
1) создаём файл 1.sql в котором пишем следующие строчки:
BACKUP DATABASE [Моя база] TO DISK = @Path ... <???>
declare @Path varchar(1000)
set @Path = '<D:\MsSQL\damp\>' + convert(varchar(8),GetDate(),112) + '.bak'
select @Path
2) потом создаём запускной батничек 1.bat со следующими строчками:
set SQLSERVER=sqlserver
set ISQL=E:\Progra~1\Micros~1\90\Tools\Binn\OSQL.EXE
set LOG=D:\MsSQL\damp\LOG
set ArcSQL=D:\MsSQL\execute\1.sql
"%ISQL%" -E -S %SQLServer% -d master -i %ArcSQL% -n -o %log%\log_autobackupsql_%Database%.txt
Так?
Добавлено через 1 час 41 минуту 6 секунд
Спасибо огромное! Всё получилось!
Единственное в файле 1.sql нужно было кое что подправить. Теперь он выглядит вот так:
declare @Path varchar(1000)
set @Path = 'D:\MsSQL\damp\' + convert(varchar(8),GetDate(),112) + '.bak'
BACKUP DATABASE база TO DISK = @Path
Всё работает!
CHIM.86,
:)
Ну да, декларирование и присваивание должны идти раньше процедуры вызова, и Я до этого правильно писал.
BACKUP DATABASE база TO DISK = @Path может иметь продолжение
http://msdn.microsoft.com/ru-ru/libr...5(SQL.90).aspx
по хорошему (по правильному), ночью запускается шедуля которая делает полный бэкап, а днем (в рабочее время, каждые через 3-4 часа ) делается разностный бэкап.
А так все верно.
Еще можно время к наименованию файла прикрутить, и в строке Set @Path = '<путь и название файла>_' + convert(varchar(8),GetDate(),112) + '.bak'.
И select @Path можно убрать, оно просто показало бы тебе путь, это нужно было для отладки.
Хорошо когда знаешь SQL. :)
Да еще ... osql можно положить в любое другое место на сервере, его одного (файлика) вполне достаточно.
Пример:
если osql переместить в папку с запросом
set SQLSERVER=sqlserver
set LOG=D:\MsSQL\damp\LOG
set ArcSQL=D:\MsSQL\execute\
"%ArcSQL%.osql.exe" -E -S %SQLServer% -d master -i %ArcSQL%.1.sql -n -o %log%\log_autobackupsql_%Database%.txt
И еще вопросик...
У тебя теперь файл бэкапа *.bak?
Да! Всё как полагается! *.bak
Ещё такой вопрос...
Можно ли таким способом сделать бэкап удалённо? Т.е. с другой машины запустить, сделать дамп и сохранить дамп на этой же машине!
CHIM.86,
Можно ... :)
, но сложно, да и зачем?
В синтаксисе менять ничего не надо?
Работает на vBulletin® версия 3.6.10. Copyright ©2000-2012, Jelsoft Enterprises Ltd. Перевод: zCarot