Как скопировать бд ms sql
Существует несколько способов копирования таблицы в базе данных MS SQL Server. Предлагаю несколько вариантов создания копии таблиц. Какой из них выбрать – зависит от структуры таблицы, наличия в ней индексов, триггеров и т.п., а также желания делать что-то руками.
1. Ручной метод копирования структуры таблицы
В Micrisoft SQL Management Studio выбрать базу, выбрать таблицу, нажать правой кнопкой мыши и выбрать пункты «Script Table as» -> «CREATE TO» -> «New Query Editor Window». В окне запроса откроется код для создания таблицы. В нем нужно указать имя базы, в которой нужно сделать копию таблицы, и новое имя, если база не меняется. Как создать код для создания структуры имеющейся таблицы, показано на рисунке ниже.

Как создать код для создания структуры имеющейся таблицы
С помощью этого способа будут созданы индексы таблицы, но не скопируются триггеры. Их нужно копировать аналогичным способом.
Для копирования данных в уже созданную таблицу нужно использовать такой SQL запрос:
INSERT into [db2].[dbo].tmp_tbl_Deps SELECT * FROM [db1].[dbo].tbl_Deps
2. Копирование SQL таблицы запросом в одну строчку
Сделать копию структуры таблицу и данных внутри одной базы:
SELECT * into tmp_tbl_Dep FROM tbl_Deps
Скопировать структуры таблицу и ее данные из одной базы в другую:
SELECT * into [Db2].[dbo].tmp_tbl_Deps FROM [Db1].[dbo].tbl_Deps
Минус у такого решения – не копируются индексы.
Microsoft SQL Server 2008. Как сохранить на флэшку свою работу?
На лабораторных изучаем базу данных Microsoft SQL Server 2008, хотел скопировать файлы mdf, ldf но компьютер говорит что они используются, но программу Microsoft SQL Server 2008 я закрыл. Как сохранить на флэшку свою работу, чтобы на следующей паре продолжить работу?
5 ответов
06 октября 2009 года
380 / / 02.01.2008
На лабораторных изучаем базу данных Microsoft SQL Server 2008, хотел скопировать файлы mdf, ldf но компьютер говорит что они используются, но программу Microsoft SQL Server 2008 я закрыл. Как сохранить на флэшку свою работу, чтобы на следующей паре продолжить работу?
Эти файлы используются Сервером MS SQL! То что ты закрыл — среда для управления этим сервером, а не сервер! Если ты хочешь скопировать базу — сделай резрвную копию, перенеси и востанови потом. Контекстное меню базы вызови — там есть эта операция.
П.С.:
УЖАС! Куда смотрят модераторы.
09 октября 2009 года
7 / / 30.04.2008
Второй (Глупый) вариант (в жизни всякое нужно).
Просто для копирования приостановите службу MSQSL сервера.
файлы разблокируются.
09 октября 2009 года
7.3K / / 20.01.2000
Вариант действительно не очень — остановка/запуск сервера требует набора администраторских прав. Репликация — прав только на свою базу и на запись в ту папку куда сохраняет. Поэтому правильно и безопасно — использовать backup/restore.
Кроме того, не стоит забывать — сервер предполагает работу нескольих пользователей. И остановка/запуск — далеко не лучшее решение.
09 октября 2009 года
4.5K / / 09.08.2005
Ну, еще есть такой вариант, как attach/detach базы, что, правда, тоже требует привелегий администратора.
12 октября 2009 года
7 / / 30.04.2008
Вариант действительно не очень — остановка/запуск сервера требует набора администраторских прав. Репликация — прав только на свою базу и на запись в ту папку куда сохраняет. Поэтому правильно и безопасно — использовать backup/restore.
Я сразу написал что вариант глупый.
А в случае с учебной базой — возможны всякие организации БД
вплодь до отсутствия необходимых прав. (ну далеко не каждое учебное заведение может держать нормальный сервер и держать на нём лицензию MSSQL, отсюда и глупые предложения + не всегда есть возможность работать с бэкапом (увы встречается)), а так согласен — работать с бэкапом более верное решение которое кстати может восстанавливать бэкапы баз данных с разными версиями сервера (ну не гарантирую).
а на коментарии не нарывался — просто объяснил как можно это сделать.
выбор вариантов действий человек пусть оставляет за собой.
в принципе вообще можно бд перегнать в набор SQL запросов.
attach/detach — для того и нужен — дабы тупо скопированную базу перенести на другой пылесос.(насколько я помню =/ . )
Как скопировать базу данных MySQL 1 мин для чтения

Описание: в этой статье показано, как скопировать базу данных MySQL на одном и том же сервере и с одного сервера на другой.
Копирование базы данных MySQL на тот же сервер
Чтобы скопировать базу данных MySQL, вам необходимо выполнить следующие шаги:
- Сначала создайте новую базу данных, используя оператор CREATE DATABASE.
- Во-вторых, экспортируйте все объекты базы данных и данные базы данных, из которой вы хотите скопировать, используя инструмент mysqldump.
- В-третьих, импортируйте файл дампа SQL в новую базу данных.
Для демонстрации мы скопируем базу данных classicmodels в базу данных classicmodels_backup.
Шаг 1. Создайте базу данных classmodels_backup:
Сначала войдите на сервер базы данных MySQL:
>mysql -u root -p Enter password: **********
Затем используйте оператор CREATE DATABASE следующим образом:
> CREATE DATABASE classicmodels_backup;
В-третьих, используйте команду SHOW DATABASES для проверки:
> SHOW DATABASES
Сервер базы данных MySQL возвращает следующий вывод:
+----------------------+ | Database | +----------------------+ | classicmodels | | classicmodels_backup | | information_schema | | mysql | | performance_schema | | sys | +----------------------+ 6 rows in set (0.00 sec)
Как видите, мы успешно создали базу данных classicmodels_backup.
Шаг 2 . Копирование объектов базы данных и данные в файл SQL с помощью инструмента mysqldump.
Предположим, вы хотите сбросить объекты базы данных и данные базы данных classicmodels в файл SQL, расположенный в папке D:\db, вот команда:
>mysqldump -u root -p classicmodels > d:\db\classicmodels.sql Enter password: **********
По сути, эта команда инструктирует mysqldump войти на сервер MySQL, используя учетную запись пользователя root с паролем, и экспортирует объекты базы данных и данные classicmodels базы данных в d:\db\classicmodels.sql. Обратите внимание, что оператор(>) означает экспорт.
Читать Предложение IN в MySQL
Шаг 3 . Импортируйте файл d:\db\classicmodels.sql в базу данных classicmodels_backup.
>mysql -u root -p classicmodels_backup < d:\db\classicmodels.sql Enter password: **********
Обратите внимание, что оператор (<) означает импорт.
Чтобы проверить импорт, вы можете выполнить быструю проверку с помощью команды SHOW TABLES.
> SHOW TABLES FROM classicmodels_backup;
Он вернул следующий вывод:
+--------------------------------+ | Tables_in_classicmodels_backup | +--------------------------------+ | customers | | employees | | offices | | orderdetails | | orders | | payments | | productlines | | products | +--------------------------------+ 8 rows in set (0.01 sec)
Как видите, мы успешно скопировали все объекты и данные из базы данных classicmodels в базу данных classicmodels_backup.
Скопируйте базу данных MySQL с одного сервера на другой
Чтобы скопировать базу данных MySQL с сервера на другой, выполните следующие действия:
- Экспортируйте базу данных на исходном сервере в файл дампа SQL.
- Скопируйте файл дампа SQL на конечный сервер
- Импортируйте файл дампа SQL на конечный сервер
Давайте посмотрим, как скопировать базу данных classicmodels с сервера на другой.
Сначала экспортируйте базу данных classicmodels в файл db.sql.
>mysqldump -u root -p --databases classicmodels > d:\db\db.sql Enter password: **********
Обратите внимание , что опция —database позволяет включить mysqldump как операторы CREATE DATABASE и USE в файле SQL дамп. Эти операторы создадут базу данных classicmodels на конечном сервере и сделают новую базу данных базой данных по умолчанию для загрузки данных.
Вкратце, следующие операторы включаются в начало файла дампа SQL, когда мы используем —databaseoption.
CREATE DATABASE `classicmodels`. USE `classicmodels`;
В-третьих, импортируйте файл db.sql на сервер базы данных, предполагая, что файл db.sql был скопирован в папку c:\tmp\.
>mysql -u root -p classicmodels < c:\tmp\db.sql
В этой статье вы шаг за шагом научились копировать базу данных MySQL на тот же сервер и копировать базу данных с одного сервера на другой.
Как скопировать бд ms sql

У вас есть база данных MS SQL Server, которую нужно перенести на другой физический комп. Вы уже сделали бэкап и радостно приступаете к восстановлению. Но тут обнаруживается, что на том компе, куда нужно перенести базу, установлена более старая версия MS SQL Server. Stack Overflow уверяет вас, что всё плохо. Но так ли это на самом деле?
Конечно, перенос базы из более новой версии в старую — это не классический и не самый правильный сценарий работы. Но зачастую базы данных создаются такими, что они поддерживают все более новые версии SQL, начиная с какой-то, например с 2008 R2, т.к. прямая совместимость у MS SQL более чем отличная. И, например, ваш клиент уже поставил себе MS SQL 2016, а у вас на тестовом сервере для разработки стоит MS SQL 2014. А вы хотите развернуть себе базу клиента, чтобы разобраться, где у него путаница с данными.
Microsoft открестились от проблемы — мол нет у них обратной совместимости, и баста. Резервную копию, созданную в более новом сервере, невозможно восстановить на более старом сервере. Да, у них есть инструменты типа DTS, копирование базы, экспорт-импорт и т.п. Но они настолько неудобны и громоздки, что нормальный перенос большой БД с множеством таблиц сделать с их помощью не особо удобно. Во всяком случае лично у меня не получилось.
Да, можно сгенерировать SQL-скрипты всей базы, включая данные. Но представьте, у вас в базе куча блоб-полей с большими данными, и вообще размер всей базы 500+ ГБ. Представляете, сколько будет занимать такой скрипт, сколько времени он будет генерироваться и исполняться.
Итак, задача — в точности воссоздать базу данных (структуру и данные) из новой версии MS SQL сервера в более старой версии. Я придумал довольно простое решение, которым хочу поделиться. Конечно, данное решение обладает значительным количеством ограничений, но всё же на мой взгляд это лучше, чем DTS и скрипты.
Ограничение номер один заключается в том, что вам нужен доступ через MS SQL Management Studio к обоим серверам — старому и новому. Если это не возможно, то должна быть возможность на той машине, откуда нужно перенести базу, установить ту версию SQL, в которую нужно перенести базу, чтобы перенести базу сначала в эту версию локально, а потом уже перетащить её через бэкап или непосредственно через *df файлы базы данных (через Detach/Attach) на новую машину (версия SQL Server'а в этом случае уже будет совпадать).
Еще одним ограничением является то, что вам будет необходим скрипт схемы базы данных (всех объектов, включая таблицы, индексы, констрейнты, хранимые процедуры, триггеры и т.п.) без данных, причем инструкции создания Foreign Key Constraints должны в этом скрипте идти в самом конце, отдельно от скрипта создания самих таблиц.
Опишу кратко сам алгоритм переноса данных. Все действия выполняются в сеансе Management Studio, подключенной к серверу, на который нужно перенести базу.
1) На новом сервере создаем пустую базу данных с такими же файлами и файловыми группами, как переносимая база.
2) Скриптом схемы базы данных создаем все объекты базы (таблицы, индексы, представления, триггеры, хранимые процедуры и функции), но без создания Foreign Key Constraints. Создавать FK на этом этапе нельзя, т.к. они будут мешать вставке данных.
3) Подключаем базу данных, из которой будем переносить данные, в качестве Linked Server'а, чтобы можно было использовать в запросах к новой базе данных обращения к старой базе данных.
EXEC sp_addlinkedserver @server=N'LinkedServerAlias', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'LinkedServerHost\LinkedServerName'; EXEC sp_addlinkedsrvlogin 'LinkedServerUser', 'false', null, 'RealUser', 'RealUserPassword';
4) Т.к. структуры баз совпадают, воспользуемся встроенной хранимой процедурой sp_msforeachtable, которая позволяет выполнить запрос над каждой таблицей БД, чтобы сгенерировать скрипт переноса данных из старой базы в новую через запрос вида
INSERT INTO ? SELECT * FROM ?
Вместо знака вопроса sp_msforeachtable подставляет имя каждой таблицы и выполняет запрос несколько раз (по одному разу на каждую таблицу).
Здесь я натолкнулся на самое большое количество граблей.
а) Проблема номер один заключается в том, что для таблиц с IDENTITY-полями необходимо вызывать:
SET IDENTITY_INSERT ON; --INSERT INTO . (сама вставка); SET IDENTITY_INSERT OFF;
б) Проблема номер два заключается в том, что на таблицах, в которых нет IDENTITY-полей, делать данный вызов нельзя, поэтому требуется динамически определять, есть в таблице IDENITY-колонка или нет.
Это можно сделать таким запросом:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME='SomeTable') AND (COLUMNPROPERTY(object_id('dbo.SomeTable'), COLUMN_NAME, 'IsIdentity') = 1)
в) Проблема номер три заключается в том, что, как оказалось, в режиме IDENITY_INSERT ON нельзя делать
INSERT INTO . SELECT * FROM .
, а нужно перечислять конкретные поля.
Перечислить поля таблицы в строку можно таким запросом:
SELECT SUBSTRING( (SELECT ', ' + QUOTENAME(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'SomeTable' ORDER BY ORDINAL_POSITION FOR XML path('')), 3, 200000);
4) Генерируем скрипт вставки по все таблицы:
Процедура генерации скрипта
EXEC sp_msforeachtable N' DECLARE @command varchar(MAX); DECLARE @name varchar(200); SET @name=''?''; SET @name = SUBSTRING(@name, 8, LEN(@name)-8); SET @command = ''''; SELECT @command= SUBSTRING( (SELECT '', '' + QUOTENAME(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '''' + @name + '''' ORDER BY ORDINAL_POSITION FOR XML path('''')), 3, 200000); SET @command = ''INSERT INTO ''+ @name +'' (''+ @command + '') SELECT '' + @command + '' FROM '' + ''LinkedServerAlias.SourceDatabase.'' + ''?''; SET @command= ''IF EXISTS (select * from INFORMATION_SCHEMA.COLUMNS where (TABLE_NAME='''''' + @Name + '''''') AND (COLUMNPROPERTY(object_id(''''dbo.''+@Name+''''''), COLUMN_NAME, ''''IsIdentity'''') = 1)) SET IDENTITY_INSERT '' + @name + '' ON; '' +@command; SET @command=@command+'';'' + ''IF EXISTS (select * from INFORMATION_SCHEMA.COLUMNS where (TABLE_NAME='''''' + @Name + '''''') AND (COLUMNPROPERTY(object_id(''''dbo.''+@Name+''''''), COLUMN_NAME, ''''IsIdentity'''') = 1)) SET IDENTITY_INSERT '' + @name + '' OFF;''; PRINT (@command); --EXEC(@command); // Если раскомментировать, скрипт будет сразу исполняться, а не только выводиться на экран '
5) Исполняем сгенерированный скрипт переноса данных
6) Исполняем скрипт на создание всех Foreign Key Constraints (теперь уже можно).
7) Готово! Вы перенесли базу из нового сервера SQL в старый, хоть это и считалось невозможным. Причем перенос осуществляется всего лишь раза в полтора медленнее, чем скорость передачи данных по сети, т.е. довольно быстро.
8) Прибираемся за собой (отключаем Linked Server):
EXEC sp_droplinkedsrvlogin 'LinkedServerUser', null; sp_dropserver 'LinkedServerAlias';
1) Подобным методом не получится перенести таблицы, в которых есть колонки с типом XML.
Наверняка есть множество других ограничений, т.к. в той базе, которую я переносил подобным способом, не использовалось множество возможностей SQL-сервера. Вы можете написать об ограничениях в комментариях, и я дополню ими статью.
Спасибо за внимание! Надеюсь, кому-то поможет.
К сожалению, не доступен сервер mySQL
