MS SQL data export/import
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
MS SQL data export/import
Подскажите, пожалуйста, хорошие линки по следующему поводу:
Нужно написать скрипты для экспорта данных и последущего импорта в заново созданную базу. Мы еще на том этапе когда и dbschema changes не такая уж редкость, а данные терять уже не хочется.
В частности хотелось бы не потерять данные из таблиц, структура которых поменялась. Можно ли это сделать средствами MS SQL built-in Import/Export или нужны дополнительные tools?
Cпасибо,
Сабина
Нужно написать скрипты для экспорта данных и последущего импорта в заново созданную базу. Мы еще на том этапе когда и dbschema changes не такая уж редкость, а данные терять уже не хочется.
В частности хотелось бы не потерять данные из таблиц, структура которых поменялась. Можно ли это сделать средствами MS SQL built-in Import/Export или нужны дополнительные tools?
Cпасибо,
Сабина
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Вам скорее всегдо будет достаточно DTS (он же Import,export)
Но если преобразования сложные, типа нормализации или денормализации, то легче обе базы положить на один сервер и писасть SQL который типа
insert into NewDb.dbo.TAB (collist)
select collist,constants,subqueries etc from oldDb.dbo.TAB ,and joins ???
Сразу натолкну на то что может Вам понодовится
set identity_insert on/off
Но если преобразования сложные, типа нормализации или денормализации, то легче обе базы положить на один сервер и писасть SQL который типа
insert into NewDb.dbo.TAB (collist)
select collist,constants,subqueries etc from oldDb.dbo.TAB ,and joins ???
Сразу натолкну на то что может Вам понодовится
set identity_insert on/off
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Dmitry67 wrote:Вам скорее всегдо будет достаточно DTS (он же Import,export)
Большое спасибо. И еще вопрос по ходу, где можно посмотреть примеры скриптов с использованием bcp utility? Я пыталась найти sample codes, что идет в комплекте с SQL Server, но на MS сайте непонятно написано с какого диска его ставить. Это SP3? Если да, то в каком из трех install file-ов?
Если это install самого сервера, то видно я не ту версию пробую, потому что там только English Query и еще какой-то другой компонент к серверу, а Sample Code нет.
Похоже проще просто воспользоваться примерами из Интернета.
Cабина
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
когда я запускаю
----------------------------------------------------------------
declare @bcpcmdline nvarchar(4000)
declare @sqlfilename varchar(100)
select @sqlfilename = 'C:\Equipment.txt'
select @BCPCMDLINE = 'bcp "select * FROM Equipment" queryout'
+ @SQLFILENAME + ' -S -U [user] -P [password] -c -E'
EXEC MASTER..XP_CMDSHELL @BCPCMDLINE
------------------------------------------------------------------------
получаю
------------------------------------------------------------------
SQLState = 08001, NativeError = 17
Error = [Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server does not exist or access denied.
SQLState = 01000, NativeError = 2
Warning = [Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionOpen (Connect()).
NULL
---------------------------------------------------
username и password мои в полном порядке и я db owner
Если подставить после -S @@servername или собственно имя сервера, та же ошибка.
Если запускать DTS wizard, все работает нормально, но я хочу писать stored procedure, типа "BCP out a table" at http://www.sqlservercentral.com/scripts/listscriptsbyauthor.asp?author=4
----------------------------------------------------------------
declare @bcpcmdline nvarchar(4000)
declare @sqlfilename varchar(100)
select @sqlfilename = 'C:\Equipment.txt'
select @BCPCMDLINE = 'bcp "select * FROM Equipment" queryout'
+ @SQLFILENAME + ' -S -U [user] -P [password] -c -E'
EXEC MASTER..XP_CMDSHELL @BCPCMDLINE
------------------------------------------------------------------------
получаю
------------------------------------------------------------------
SQLState = 08001, NativeError = 17
Error = [Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server does not exist or access denied.
SQLState = 01000, NativeError = 2
Warning = [Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionOpen (Connect()).
NULL
---------------------------------------------------
username и password мои в полном порядке и я db owner
![HBZ :pain1:](./images/smilies/pain25.gif)
Если подставить после -S @@servername или собственно имя сервера, та же ошибка.
Если запускать DTS wizard, все работает нормально, но я хочу писать stored procedure, типа "BCP out a table" at http://www.sqlservercentral.com/scripts/listscriptsbyauthor.asp?author=4
Last edited by Sabina on 27 Nov 2003 00:48, edited 1 time in total.
-
- Уже с Приветом
- Posts: 550
- Joined: 31 Mar 2000 10:01
- Location: Moscow --> Baltimore, MD
А так не пробовали?
Code: Select all
select @BCPCMDLINE = 'bcp "select * FROM Equipment" queryout'
+ @SQLFILENAME + ' -S' + @@servername + ' -U [user] -P [password] -c -E'
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Niky wrote:А так не пробовали?Code: Select all
select @BCPCMDLINE = 'bcp "select * FROM Equipment" queryout'
+ @SQLFILENAME + ' -S' + @@servername + ' -U [user] -P [password] -c -E'
Так тоже пробовала
![Wink :wink:](./images/smilies/icon_wink.gif)
Error = [Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server does not exist or access denied.
Сабина
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
[quote="Sabina"]
------------------------------------------------------------------
SQLState = 08001, NativeError = 17
Error = [Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server does not exist or access denied.
SQLState = 01000, NativeError = 2
Warning = [Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionOpen (Connect()).
NULL
---------------------------------------------------
[quote]
I wonder if it has something to do with Net-Libraries?
Server is Advanced 2000, my client is Win XP.
Sabina
------------------------------------------------------------------
SQLState = 08001, NativeError = 17
Error = [Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server does not exist or access denied.
SQLState = 01000, NativeError = 2
Warning = [Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionOpen (Connect()).
NULL
---------------------------------------------------
[quote]
I wonder if it has something to do with Net-Libraries?
Server is Advanced 2000, my client is Win XP.
Sabina
-
- Уже с Приветом
- Posts: 550
- Joined: 31 Mar 2000 10:01
- Location: Moscow --> Baltimore, MD
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Niky wrote:А с командной строки на сервере у вас BCP работает?
Спасибо Niky, что помогаете невзирая на предпраздничный вечер
Попробовала запустить с сервера, тот же ответ
![Sad :(](./images/smilies/icon_sad.gif)
И с разными user accounts та же история. Правда admin password я не знаю, но вроде тут admin account как раз и не обязателен
Cабина
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
1. надеюсь в реальной программе [user] и [password] заменены на реальные ?
2. Пoпробуйте trusted connection
3. Не является ли имя сервера 'хитрым' - то есть содержащим минусы или еще какие не вполне допустимые символы (но минусы просто обожают
)
4. наконец попробуйте BULK INSERT, он еще быстрее bcp
5. DTS тоже можно запускать из sp так:
exec master.dbo.xp_cmdshell 'DTSrun dtsname /qualifiers see bol'
![Smile :)](./images/smilies/icon_smile.gif)
2. Пoпробуйте trusted connection
3. Не является ли имя сервера 'хитрым' - то есть содержащим минусы или еще какие не вполне допустимые символы (но минусы просто обожают
![Smile :)](./images/smilies/icon_smile.gif)
4. наконец попробуйте BULK INSERT, он еще быстрее bcp
5. DTS тоже можно запускать из sp так:
exec master.dbo.xp_cmdshell 'DTSrun dtsname /qualifiers see bol'
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Dmitry67 wrote:2. Пoпробуйте trusted connection
Такое ощущение что я(user accounts, которые я пробовала) не могу запускать xp_cmdshell. Он вроде не из тех, что могут запускаться только admin-ом.
Dmitry67 wrote:3. Не является ли имя сервера 'хитрым' - то есть содержащим минусы или еще какие не вполне допустимые символы (но минусы просто обожают)
Точно, есть там минус. А как тогда быть? Сервер переименовывать?
![Shocked 8O](./images/smilies/icon_eek.gif)
Dmitry67 wrote:4. наконец попробуйте BULK INSERT, он еще быстрее bcp
Мне пока хочется попробовать таблицу в файл скинуть, bulk insert вроде этого не делает.
Dmitry67 wrote:5. DTS тоже можно запускать из sp так:
exec master.dbo.xp_cmdshell 'DTSrun dtsname /qualifiers see bol'
Спасибо, попробую в понедельник. У нас тут выходные, индюшек все поедают
![Smile :)](./images/smilies/icon_smile.gif)
-
- Уже с Приветом
- Posts: 956
- Joined: 04 Mar 2002 10:01
Re: MS SQL data export/import
Sabina wrote:Подскажите, пожалуйста, хорошие линки по следующему поводу:
Нужно написать скрипты для экспорта данных и последущего импорта в заново созданную базу. Мы еще на том этапе когда и dbschema changes не такая уж редкость, а данные терять уже не хочется.
В частности хотелось бы не потерять данные из таблиц, структура которых поменялась. Можно ли это сделать средствами MS SQL built-in Import/Export или нужны дополнительные tools?
Cпасибо,
Сабина
Как тут уже неоднократно писали, можно DTS, если аккуратно.
Ну а для страховки очень рекомендую правильный инструмент по типу http://www.red-gate.com/sql/summary.htm
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Sabina wrote:1
Такое ощущение что я(user accounts, которые я пробовала) не могу запускать xp_cmdshell. Он вроде не из тех, что могут запускаться только admin-ом.
2
Точно, есть там минус. А как тогда быть? Сервер переименовывать?![]()
3
У нас тут выходные, индюшек все поедают
1 Как раз их тех. Ведь это одна из самых опасных процедур
Вы можете сделать xp_cmdshell('del C:\чтото важное')
2 Попробуйте заклычить сервер в двойные кавычки
3 Всего Вам...
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Dmitry67 wrote:1 Как раз их тех. Ведь это одна из самых опасных процедур
Вы можете сделать xp_cmdshell('del C:\чтото важное')
Я неточно выразилась. Хотела сказать "не только дефолтовый sa". Тот эккаунт, который я пробовала тоже aдминский, правда я не в курсе про fixed server role, etc.
"only members of the sysadmin fixed server role can execute this
extended stored procedure. However, permissions can be granted to other
users to execute stored procedures and extended stored procedures.
You can find out the current permissions by running 'sp_helprotect' stored
procedure, which will tell, who else..."
А bcp тоже не все могут запускать? Я даже example на Northwind с самого сервера запустить не могла.
2 Попробуйте заклычить сервер в двойные кавычки
Слава богу, что можно поробовать "малыми жертвами" обойтись
![Very Happy :D](./images/smilies/icon_biggrin.gif)
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
С утра на тот же скрипт сервер меня порадовал новым error message
Msg 50001, Level 1, State 50001
xpsql.cpp: Error 997 from GetProxyAccount on line 604
Which makes me think I am not authorized to run xp_cmdshell.
However 'sp_helprotect' gives me a list of 52 records including sysmembers and sysusers that I am certain I am a part of.
Единственный человек который имеет full access придет после обеда.
Имеет смысл продолжать что-то пытаться с этим сделать или уже расслабиться и делать что-нибудь другое до ее прихода
?
Спасибо IA72 за совет по поводу SQL tools (который я почему-то поздно заметила
). Мне вообще-то нужен скрипт, который можно будет потом вставить в скрипты для QA. Чтобы когда мы меняем db schema, их данные не пропадали. Этот тул генерирует код, который потом можно слямзить?
Cабина
Msg 50001, Level 1, State 50001
xpsql.cpp: Error 997 from GetProxyAccount on line 604
Which makes me think I am not authorized to run xp_cmdshell.
However 'sp_helprotect' gives me a list of 52 records including sysmembers and sysusers that I am certain I am a part of.
Единственный человек который имеет full access придет после обеда.
Имеет смысл продолжать что-то пытаться с этим сделать или уже расслабиться и делать что-нибудь другое до ее прихода
![Smile :)](./images/smilies/icon_smile.gif)
Спасибо IA72 за совет по поводу SQL tools (который я почему-то поздно заметила
![Embarassed :oops:](./images/smilies/icon_redface.gif)
Cабина