Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Tabelleninhalt differentiell in andere Tabelle schreiben

Frage Entwicklung Datenbanken

Mitglied: dondy

dondy (Level 1) - Jetzt verbinden

28.07.2010 um 12:00 Uhr, 6727 Aufrufe, 6 Kommentare

Hallo zusammen,

ich habe zwei Datenbanken (A und B) und möchte von DB A den Inhalt einer Tabelle regelmäßig in DB B kopieren.
Da sich die Tabelle in DB A regelmäßig ändert (es kommen Datensätze hinzu oder werden entfernt) möchte ich nur die neuen Datensätze in die Tabelle der DB B hinzufügen. Wenn Datensätze aus der DB A gelöscht werden sollen diese weiterhin in DB B erhalten bleiben.
Dies soll ca. alle 5 Minuten passieren.
Ich verwende eine SQL2005 Server mit Windows 2003.

Über die Assistenten im SQL-Server bekomme ich das nicht hin. Hat jemand eine Idee?

MfG
Mitglied: filippg
28.07.2010 um 21:00 Uhr
Hallo,

einen Primärschlüssel hast du ja sicher, sei der Spaltenname id, dann sollte:
INSERT INTO B SELECT * FROM A WHERE A.id NOT IN (SELECT B.id FROM B)
das gewünschte tun.
Zur IN-Klausel schreibt MS "Wenn eine IN-Klausel eine extrem hohe Anzahl von Werten (viele Tausende) enthält, können die Ressourcen überbeansprucht werden" http://msdn.microsoft.com/de-de/library/ms177682.aspx

Ist der primärschlüssel streng monoton steigend (also jeder neue größer als jeder vorherige), dann dürfte auch
INSERT INTO B SELECT * FROM A WHERE A.id > (SELECT MAX(B.id) FROM B)
funktionieren und wäre vermutlich performanter.

Gruß

Filipp
Bitte warten ..
Mitglied: dondy
29.07.2010 um 14:03 Uhr
Hallo Filipp,

vielen Dank für Deine Antwort.
Also einen PK gab es in der Tabelle bisher nicht, habe ich aber nachgeholt.
Leider klappt aber dein oben genanntes Beispiel bei mir nicht, weil ich ja über zwei Datenbankserver hinweg die Abfrage mache.
Nun habe ich mir einen Verbindungsserver gebastelt, der auch funktioniert. Jetzt bekomme ich aber die Abfrage nicht hin.
Folgende Abfrage habe ich erstellt:

INSERT INTO OPENQUERY(SERVER_B,'
SELECT * FROM VIEW a
WHERE a.ID NOT IN (Select * from OPENQUERY(SERVER_B,'SELECT ID FROM Tabelle_B'))')

Bei dieser Abfrage erhalte ich dann einen Syntaxfehler. Wo liegt dieser?
Oder ist es garnicht möglich OPENQUERY's miteinander zu verschachteln?
Bitte warten ..
Mitglied: filippg
29.07.2010 um 20:38 Uhr
Hallo,

hast du a) Zwei Datenbanken innerhalb einer MS SQL-Instanz oder b) zwei DBs in zwei unterschiedlichen MS SQL-Instanzen (meinetwegen auch auf unterschiedlichen physikalischen Servern)?

a) sollte ganz eifnach gehen: INSERT INTO dbB..B SELECT * FROM dbA..A WHERE dbA..A.id NOT IN (SELECT dbB..B.id FROM dbB..B)
sprich: DB-Name.. vor jede Tabelle voranstellen.

b) puh... Mir ist nicht klar, was das VIEW in deinem Statement soll. Aber ob man OPENQUERY jetzt schachteln darf... performant ist das sicher nicht. Was bestimmt funktioniert, wenngleich auch nicht performant, ist die Produktivtabelle erst auf Server B zu kopieren, und dann dort eingangs von mir genannten Query auszuführen.

Gruß

Filipp
Bitte warten ..
Mitglied: Biber
29.07.2010 um 21:09 Uhr
Moin dondy,

ich verstehe den Plan auch nicht ganz und möchte mal nachfragen.
Verstanden habe ich den Plan aus Datensicht -> nur die "neuen" Datensätze von Server A/TabelleA sollen alle 5 Minuten auch in TabelleB auf Server B eingefügt werden. Was auch immer fachlich dahinterstehen mag.

Nicht verstanden habe ich, wen oder was du du denn mit der 5minütlichen Abgleicherei beauftragen oder beschäftigen willst.
Den DB-Server A (am dem ja wohl auch eine produktive Datenerfassungs-Appz rödelt) ?
Den Nur-Lese-DB-Clone auf DB-Server ?
Oder macht das der "man in the middle", der Verbindungsserver?
Oder beide/alle drei?

Wäre es nicht sinnvoller, wenn sich finanziell keine ETL-Applikation rechnet, den CPU-und Netzwerkaufwand ein bisschen zu minimieren dadurch, dass
  • Server A per Trigger jeden neuen Datensatz in eine Tabelle auf seinem Server A (oder auf dem Verbindungsserver) INSERTed sofort wenn ein neuer Satz eingegeben wird (der KANN noch nicht da sein)
  • der Empfangsserver alle x Minuten alle diese Sätze liest, alle inserted und die Zwischentabelle C komplett löscht?

Grüße
Biber
Bitte warten ..
Mitglied: filippg
29.07.2010 um 21:30 Uhr
Hallo,

* Server A per Trigger jeden neuen Datensatz in eine Tabelle auf seinem Server A (oder auf dem Verbindungsserver) INSERTed sofort
wenn ein neuer Satz eingegeben wird (der KANN noch nicht da sein)
das ist natürlich der eleganteste Weg, das ist mir nicht eingefallen!
Allerdings sind die Trigger ein bisschen tückisch, insbesondere, wenn man sich nicht damit auskennt. Z.b. Auslösen des INSERT-Triggers auch bei UPDATE-Vorgängen; Trigger-Aufruf bedeutet nicht, dass genau _eine_ Zeile eingefügt wurde, Trigger kann zum Rollback der ganzen Transaktion führen...

Gruß

Filipp
Bitte warten ..
Mitglied: Biber
29.07.2010 um 22:18 Uhr
Moin filippg,

...sind die Trigger ein bisschen tückisch
Ja schon, ich hatte mal eine Desiree Trigger als Praktikantin, ich weiss es wirklich... und ihre Mutti erst!

Aber WTF kann bei einem Trigger schiefgehen, der einen drömeligen Satz als Kopie in eine DB-Tabelle schreibt, die nicht mal einen PK haben muss (keine Constraint-Verletzungen möglich)?

Und er braucht keinen DELETE- und keinen UPDATE-Trigger (außer die, die er vielleicht schon drin hat).

Die Alternative ist doch -verbessere mich, wenn ich irre-, dass irgendein anspruchsloser Prozess alle gatesverdammten 5 Minuten die komplette Datei zum Lesen sperren muss...
für die Dauer eines INTERSECT-JOINs (wie auch immer M$ den nennt).

Dabei geht die DB-Performance für alle Normal-Anwender runter... jeden Tag.. 365x im Jahr.

Wenn schon so eine Bypass-Schmuddellösung, dann wenigstens umwelt- und ressourcenschonend

Grüße
Biber

P.S. @dondy: Du hast übrigens ein sehr sympathisches Profilbildchen.
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Tabelleninhalt auf andere Tabellen übertragen
Frage von MatzusMicrosoft Office9 Kommentare

Hallo Forum, ich hoffe, dass ihr mir helfen könnt. Ich importiere über ein Makro mehrere csv Dateien in eine ...

Microsoft Office
Tabelleninhalt übernehmen
Frage von jonibaMicrosoft Office8 Kommentare

Hallo Leute! Ich benötige Hilfe bei Excel 2010 Ich habe eine Abrechnugstabelle wo ich Tankbelege eintrage. Von einer anderen ...

Microsoft Office
Excel, Tabelleninhalt nach Wert summieren
Frage von sagrosserMicrosoft Office4 Kommentare

Ich habe eine Tabelle (b3:u54) mit mehreren Namen und würde mir gerne jeden Namen mit der Anzahl seiner Häufigkeit ...

Batch & Shell
(Inkrementell, Differentiell und Full) mit shell
gelöst Frage von 125671Batch & Shell7 Kommentare

Hallo Admins! Bitte entschuldigt die kurze Störung an einem Sonntag Abend Da ich noch ein Anfänger in Powershell bin, ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 104 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell13 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...