MS SQL data export/import

User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

MS SQL data export/import

Post by Sabina »

Подскажите, пожалуйста, хорошие линки по следующему поводу:

Нужно написать скрипты для экспорта данных и последущего импорта в заново созданную базу. Мы еще на том этапе когда и dbschema changes не такая уж редкость, а данные терять уже не хочется.

В частности хотелось бы не потерять данные из таблиц, структура которых поменялась. Можно ли это сделать средствами MS SQL built-in Import/Export или нужны дополнительные tools?

Cпасибо,
Сабина
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Вам скорее всегдо будет достаточно 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
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Dmitry67 wrote:Вам скорее всегдо будет достаточно DTS (он же Import,export)


Большое спасибо. И еще вопрос по ходу, где можно посмотреть примеры скриптов с использованием bcp utility? Я пыталась найти sample codes, что идет в комплекте с SQL Server, но на MS сайте непонятно написано с какого диска его ставить. Это SP3? Если да, то в каком из трех install file-ов?
Если это install самого сервера, то видно я не ту версию пробую, потому что там только English Query и еще какой-то другой компонент к серверу, а Sample Code нет.

Похоже проще просто воспользоваться примерами из Интернета.

Cабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

когда я запускаю

----------------------------------------------------------------
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 :pain1:

Если подставить после -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.
Niky
Уже с Приветом
Posts: 550
Joined: 31 Mar 2000 10:01
Location: Moscow --> Baltimore, MD

Post by Niky »

А так не пробовали?

Code: Select all

select @BCPCMDLINE = 'bcp "select * FROM Equipment" queryout' 
+ @SQLFILENAME + ' -S' + @@servername + ' -U [user] -P [password] -c -E'
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Niky wrote:А так не пробовали?

Code: Select all

select @BCPCMDLINE = 'bcp "select * FROM Equipment" queryout' 
+ @SQLFILENAME + ' -S' + @@servername + ' -U [user] -P [password] -c -E'


Так тоже пробовала :wink: , все равно пишет

Error = [Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server does not exist or access denied.

Сабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

[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
Niky
Уже с Приветом
Posts: 550
Joined: 31 Mar 2000 10:01
Location: Moscow --> Baltimore, MD

Post by Niky »

А с командной строки на сервере у вас BCP работает?
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Niky wrote:А с командной строки на сервере у вас BCP работает?


Спасибо Niky, что помогаете невзирая на предпраздничный вечер
Попробовала запустить с сервера, тот же ответ :(

И с разными user accounts та же история. Правда admin password я не знаю, но вроде тут admin account как раз и не обязателен

Cабина
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

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'
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Dmitry67 wrote:2. Пoпробуйте trusted connection


Такое ощущение что я(user accounts, которые я пробовала) не могу запускать xp_cmdshell. Он вроде не из тех, что могут запускаться только admin-ом.

Dmitry67 wrote:3. Не является ли имя сервера 'хитрым' - то есть содержащим минусы или еще какие не вполне допустимые символы (но минусы просто обожают :) )


Точно, есть там минус. А как тогда быть? Сервер переименовывать? 8O

Dmitry67 wrote:4. наконец попробуйте BULK INSERT, он еще быстрее bcp


Мне пока хочется попробовать таблицу в файл скинуть, bulk insert вроде этого не делает.

Dmitry67 wrote:5. DTS тоже можно запускать из sp так:

exec master.dbo.xp_cmdshell 'DTSrun dtsname /qualifiers see bol'


Спасибо, попробую в понедельник. У нас тут выходные, индюшек все поедают :)
User avatar
IA72
Уже с Приветом
Posts: 956
Joined: 04 Mar 2002 10:01

Re: MS SQL data export/import

Post by IA72 »

Sabina wrote:Подскажите, пожалуйста, хорошие линки по следующему поводу:

Нужно написать скрипты для экспорта данных и последущего импорта в заново созданную базу. Мы еще на том этапе когда и dbschema changes не такая уж редкость, а данные терять уже не хочется.

В частности хотелось бы не потерять данные из таблиц, структура которых поменялась. Можно ли это сделать средствами MS SQL built-in Import/Export или нужны дополнительные tools?

Cпасибо,
Сабина


Как тут уже неоднократно писали, можно DTS, если аккуратно.
Ну а для страховки очень рекомендую правильный инструмент по типу http://www.red-gate.com/sql/summary.htm
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Sabina wrote:1
Такое ощущение что я(user accounts, которые я пробовала) не могу запускать xp_cmdshell. Он вроде не из тех, что могут запускаться только admin-ом.

2
Точно, есть там минус. А как тогда быть? Сервер переименовывать? 8O

3
У нас тут выходные, индюшек все поедают :)


1 Как раз их тех. Ведь это одна из самых опасных процедур
Вы можете сделать xp_cmdshell('del C:\чтото важное')

2 Попробуйте заклычить сервер в двойные кавычки

3 Всего Вам...
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

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 Попробуйте заклычить сервер в двойные кавычки

Слава богу, что можно поробовать "малыми жертвами" обойтись :D
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

С утра на тот же скрипт сервер меня порадовал новым 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 (который я почему-то поздно заметила :oops: ). Мне вообще-то нужен скрипт, который можно будет потом вставить в скрипты для QA. Чтобы когда мы меняем db schema, их данные не пропадали. Этот тул генерирует код, который потом можно слямзить?

Cабина

Return to “Вопросы и новости IT”