Скрипт для базы MS SQL Server - CodeHelper

Скрипт для базы MS SQL Server

1

Доброго времени суток! У меня на компе стоит база MS SQL Server Managment Studio 2008. В ней я создал базу, в базе таблицу. И с ней работает моя прога. Но, если переношу базу на другой комп где стоит, к примеру, MS SQL Server Managment Studio 2008 R2, то база не аттачится. Выдает ошибку. Мне сказали, что так будет всегда при конфликте версии, патчей, обновлений. И что можно написать типа как скрипт или вроде того универсальный типа как.. вот собственно и вопрос, как его написать?

Лучший ответ:

1

Пример переноса базы детачем на 2005-м и аттачем на 2008-м.

--На 2005-м:
use tempdb
alter database AdventureWorks_2005 set read_only with rollback immediate

exec sp_detach_db @dbname = 'AdventureWorks_2005'

--Копируем файлы БД, иначе при аттаче их займет 2008-й и 2005-й не сможет их зацепить обратно.
--2008-й, кстати, их проапгрейдит автоматом, так что 2005-й обратно уже не примет.
exec sp_configure 'show advanced options', 1
reconfigure with override
exec sp_configure 'xp_cmdshell', 1
reconfigure with override
exec xp_cmdshell 'copy "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks2005_Data.mdf" "C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA"'
exec xp_cmdshell 'copy "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks2005_Log.ldf" "C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA"'

--На 2008-м:
use tempdb

if exists (select 1 from sys.databases where name = 'AdventureWorks_2005') begin
 alter database AdventureWorks_2005 set single_user with rollback immediate
 drop database AdventureWorks_2005
end 

create database AdventureWorks_2005 on primary 
(filename = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\AdventureWorks2005_Data.mdf')
log on 
(filename = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\AdventureWorks2005_Log.ldf')
for attach

--Или
exec sp_attach_db @dbname = 'AdventureWorks_2005', 
    @filename1 = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks2005_Data.mdf', 
    @filename2 = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks2005_Log.ldf'
--что является обсолитной конструкцией.

Пример переноса базы восстановлением на 2008-м резервной копии, сделанной на 2005-м.

--На 2005-м:
use tempdb
alter database AdventureWorks_2005 set read_only with rollback immediate

backup database AdventureWorks_2005 to disk = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\AdventureWorks_2005.bak' 
with init, stats = 10, name = 'Полный бэкап', description = 'Для апгрейда на 2008'

--На 2008-м:
use tempdb

--Проверяем на фсякей содержание бэкапа
restore headeronly from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\AdventureWorks_2005.bak' 
restore filelistonly from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\AdventureWorks_2005.bak' with file = 1

--И восстанавливаемся из него
restore database AdventureWorks_2005 from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\AdventureWorks_2005.bak' 
with 
move 'AdventureWorks_Data' to 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\AdventureWorks_2005.mdf',
move 'AdventureWorks_Log'  to 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\AdventureWorks_2005.ldf',
recovery, stats = 10, replace

alter database AdventureWorks_2005 set read_write

use AdventureWorks_2005

--Перестройка индексов, апдейт статистики и перевод базы в режим поддержки новой версии
exec sp_MSforeachtable @command1 = "print '?'", @command2 = 'alter index all on ? rebuild with (online = on)'
exec sp_updatestats
alter database AdventureWorks_2005 set compatibility_level = 100

Полная версия

kiborg

Спасибо огромное. Но, возможно глупый вопрос, где это прописывать?

Sergey

В Microsoft SQL Server Management Studio. Обычный SQL запрос.

katerina

Бессмысленный комментарий

v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.