2016-09-19 3 views
0

Как говорится в названии, я хочу скопировать все записи текущих дней из нашей производственной базы данных в нашу базу данных разработки. У меня есть доступ к производственной базе данных и правам db_owner для базы данных разработки. Я пишу хранимую процедуру, которая ищет данные текущих дней, поэтому мне нужно обновить данные разработки с данными текущих дней с нашего производственного сервера. Вот что я придумал до сих пор:Копирование записей с текущего дня между таблицами в разных базах данных

use DatabaseProd 
DECLARE @i_DateCurrent DATETIME; 
SET @i_DateCurrent = CONVERT(DATETIME,CONVERT(DATE,GETDATE())); 
insert into DatabaseDev..dbo.Table_1 
select * from dbo.TableProd 
where date_received >= @i_DateCurrent 
AND date_received < DATEADD(DAY,1,@i_DateCurrent) 

Я получаю следующее сообщение об ошибке:

Msg 7202, Level 11, State 2, Line 4 Could not find server 'ServerDev' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.

Когда я проверяю таблицу sys.servers, есть только одна строка, и это только сервер Production.

Я попытался с помощью sp_addlinkedserver, но это дает мне

Msg 15247, Level 16, State 1, Procedure sp_MSaddserver_internal, Line 29 User does not have permission to perform this action.

Итак, мой вопрос: Есть ли другой способ сделать это, что не требует дополнительных разрешений на сервере? Я бы предпочел инструкцию T-SQL, потому что я буду делать это некоторое время, но если есть другой способ, я тоже могу это сделать. Базы данных, которые я использую, являются MS SQL Server 2008 R2.

+0

У вас есть две точки: DatabaseDev..dbo.Table_1, если DatabaseDev не связан с сервером. Попробуйте: DatabaseDev.dbo.Table_1 – steryd

+0

Кажется, вы получили эти две базы данных на отдельных серверах (или экземплярах). В этом случае для доступа к базам данных на одном сервере от другого вам необходимо настроить Linked Server на одном из этих двух. MSDN - https://msdn.microsoft.com/en-us/library/ff772782.aspx – GSazheniuk

+0

Да, это похоже на связанный сервер, но если вы используете учетные данные Windows и доверенное соединение, вам также может понадобиться беспокоиться о делегировании кебероса который, возможно, не будет дорогой, по которой вы хотите спуститься, в зависимости от вашей среды. вы используете SSIS? Довольно быстрый пакет может быть создан для того, чтобы делать то, что вы хотите, и для этого не потребуется 2 сервера, но SSIS сделает это за вас. – Matt

ответ

0

Это слишком длинный комментарий.

Разработка сервера , создание связанного сервера с производственным сервером. Это должно дать вам доступ для чтения ко всему, к чему вам нужен доступ.

Затем выполните работу над проектом . В конце концов, это более безопасное место для запуска скриптов, чем на производственном сервере.

+1

Согласен с тем, что вы можете создать связанный сервер в блоке dev в окне производства, используя ваши учетные данные безопасности. Не уверен, что вы используете Windows или аутентификацию sql и имеете ли вы Kerberos auth или нет. Просто имейте в виду, что вы все равно можете блокировать производство, если ваши запросы занимают много времени. Также имейте в виду, что кросс-серверные запросы могут занимать больше времени, так как иногда Sql Server решает копировать всю таблицу с одного сервера на другой и затем присоединяться. – paulbarbin

+0

Я получаю вторую ошибку, когда пытаюсь создать связанный сервер с dev на prod. Мы используем windows auth, и я уверен, что мы используем Kerberos. Запросы очень компактны и выполняются всего за несколько секунд, если не быстрее. –

0

Помимо очевидного SSIS, я мог бы предложить использовать OPENROWSET, поскольку у вас есть перспективы для обоих. MSDN OpenRowset