2016-09-19 2 views
0

Wie der Titel sagt, möchte ich alle Datensätze aus der aktuellen Produktion in unsere Entwicklungsdatenbank kopieren. Ich habe Sichtzugriff auf die Produktionsdatenbank und db_owner-Rechte für die Entwicklungsdatenbank. Ich schreibe eine gespeicherte Prozedur, die nach den Daten der aktuellen Tage sucht, also muss ich die Entwicklungsdaten mit den Daten der aktuellen Tage von unserem Produktionsserver aktualisieren. Hier ist, was ich mit so weit habe kommen:Datensätze vom aktuellen Tag zwischen Tabellen in verschiedenen Datenbanken kopieren

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) 

ich die folgende Fehlermeldung erhalten:

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.

Wenn ich die sys.servers Tabelle überprüfen, gibt es nur eine Zeile und ist nur der Produktionsserver.

versucht, mit mir sp_addlinkedserver aber es gibt mir

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

Also, meine Frage ist: Gibt es eine andere Möglichkeit, dies zu tun, die auf dem Produktionsserver nicht mehr Berechtigungen erforderlich? Ich würde eine T-SQL-Anweisung bevorzugen, da ich das für eine Weile machen werde, aber wenn es einen anderen Weg gibt, kann ich es auch tun. Die Datenbanken, die ich verwende, sind beide MS SQL Server 2008 R2.

+0

Sie haben zwei Punkte: DatabaseDev..dbo.Table_1 wenn DatabaseDev nicht verbunden ist Server versuchen: DatabaseDev.dbo.Table_1 – steryd

+0

Scheint, Sie haben diese beiden Datenbanken auf einem separaten Server (oder Instanzen). In diesem Fall müssen Sie, um auf Datenbanken auf einem Server von einem anderen Server zuzugreifen, den Verbindungsserver auf einem dieser beiden Server konfigurieren. MSDN - https://msdn.microsoft.com/en-us/library/ff772782.aspx – GSazheniuk

+0

Ja, es klingt wie Verbindungsserver, aber wenn Sie Windows-Anmeldeinformationen und vertrauenswürdige Verbindung verwenden, müssen Sie möglicherweise auch über Kerberos Delegation kümmern Das ist möglicherweise keine Straße, die Sie je nach Ihrer Umgebung herunterfahren möchten. Verwenden Sie SSIS? Ein ziemlich schnelles Paket könnte erstellt werden, um zu tun, was Sie wollen, und es würde nicht die 2 Server benötigen, um zu sprechen, aber SSIS wird es für Sie tun. – Matt

Antwort

0

Dies ist zu lang für einen Kommentar.

Einer der Entwicklung Server, erstellen Sie einen Verbindungsserver zum Produktionsserver. Dies sollte Ihnen Lesezugriff auf alles geben, auf das Sie zugreifen müssen.

Dann die Arbeit an der Entwicklung Server. Dies ist schließlich ein sicherer Ort zum Ausführen von Skripts als auf dem Produktionsserver.

+1

Es wurde vereinbart, dass Sie einen Verbindungsserver in der Entwicklungsumgebung mithilfe Ihrer Sicherheitsanmeldeinformationen zur Produktionsumgebung erstellen können. Nicht sicher, ob Sie Windows oder SQL-Authentifizierung verwenden und ob Sie Kerberos-Authentifizierung haben oder nicht. Beachten Sie jedoch, dass Sie die Produktion weiterhin blockieren können, wenn Ihre Abfragen lange dauern. Seien Sie sich auch bewusst, dass cross-sql-Server-Abfragen eine LANGE Zeit benötigen, da Sql Server sich manchmal dafür entscheidet, die gesamte Tabelle von einem Server auf den anderen zu kopieren und sich dann zu verbinden. – paulbarbin

+0

Ich bekomme den 2. Fehler, wenn ich versuche, den Verbindungsserver von Dev zu Prod zu erstellen. Wir verwenden Windows Auth und ich bin mir ziemlich sicher, dass wir Kerberos verwenden. Die Abfragen sind sehr kompakt und laufen in wenigen Sekunden, wenn nicht schneller. –

0

Anders als das offensichtliche SSIS, könnte ich vorschlagen, OPENROWSET zu verwenden, da Sie scheinen, Persimtionen zu beiden zu haben. MSDN OpenRowset

Verwandte Themen