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

Problem mit SQL Script beim kopieren von Tabellen

Frage Entwicklung Datenbanken

Mitglied: Ruffy1984

Ruffy1984 (Level 1) - Jetzt verbinden

06.05.2011, aktualisiert 13:26 Uhr, 3907 Aufrufe, 9 Kommentare

Hallo Community,


Ich habe eine Frage an euch.

Kurfe Info zur Infrastruktur:

1 x Quellserver ( SQL SERVER 2005)
1 x Zielserver (SQL SERVER 2000)

Ich habe auf dem Quellserver eine Datenbank mit mit mehreren Spalten .
Jetzt möchte ich auf den Zielserver die Tabelle mit der Spalte JOBID von dem Quellserver übertragen.

Das mache ich mit folgendem Script:
Das Script auf dem Quellserver ausgeführt

01.
insert into [Zielserver].test.dbo.Info  
02.
03.
	jobid, appid, jobinitfrom, clientname, idataagent, instance, backupset, subclient,  
04.
	data_sp, backuplevelInt, backuplevel, incrlevel, jobstatusInt, jobstatus, jobfailedreason, startdateunixsec,  
05.
	enddateunixsec, startdate, enddate, durationunixsec, duration, numstreams, numbytesuncomp, 
06.
	numbytescomp, numobjects, isAged, isAgedStr  
07.
08.
Select 
09.
	jobid, appid, jobinitfrom, clientname, idataagent, instance, backupset, subclient,  
10.
	data_sp, backuplevelInt, backuplevel, incrlevel, jobstatusInt, jobstatus, jobfailedreason, startdateunixsec,  
11.
	enddateunixsec, startdate, enddate, durationunixsec, duration, numstreams, numbytesuncomp, 
12.
	numbytescomp, numobjects, isAged, isAgedStr 
13.
  
14.
from Datenbank.dbo.info Q 
15.
 
16.
where NOT EXISTS 
17.
 (Select 1 
18.
from [Zielserver].test.dbo.Info Z 
19.
where Z.jobid = Q.jobid) 
20.
 
21.
 
Das Problem ist jetzt das er auf dem Zielserver an jeden JOBID eine .0 dranhängt z.B (544534.0) (Original: 544534)
Wenn jetzt auf dem Quellserver neue JOBIDS hinzu kommen, soll er bei der nächsten Ausführung nur noch die neu dazugekommenen JOBIDS übertragen.
Wenn nur eine neue JOBID dazugekommen ist, macht er es ohne Probleme. Jetzt habe ich aber 1 Woche nix machen können und habe das Script nochmal ausgeführt,
vorher habe ich folgendendes ausgeführt:

01.
select count (jobid) 
02.
from Quellserver			//5033 Stück 
03.
select count (jobid) 
04.
from Zielserver			//5001 Stück
obwohl nur 32 neue JOBIDS dazugekommen sind, sagt er mir 1034 Arrows effcted

Weiss einer anhand des Scriptes wo mein Fehler liegt.

Der Sinn des Scriptes ist das es 3 Quellserver gibt und alle JOBIDS auf den Zielserver übertragen werden sollen. Auf dem Zielserver sollen alle JOBIDS aber nur einmal vorkommen.

Ich hoffe es kann mir einer helfen.
Mitglied: Biber
06.05.2011 um 14:45 Uhr
Moin Ruffy1984,

du bist dir aber sicher, dass die Datentypen des Attributes "jobid" in beiden Datenbankinstanzen identisch sind???

Die Datenbankengige scheint an dieser Stelle ja von ganzzahlig in der einen, mit Nachkommastelle in der anderen Tabelle auszugehen.

Was macht denn die Query, wenn du es jeweisl auf Integer CASTest in der "IF NOT EXISTS"-Klausel?

Grüße
Biber
Bitte warten ..
Mitglied: Ruffy1984
06.05.2011 um 15:10 Uhr
Hey Biber,

Ja .. die Tabelle habe ich mit Attributen 1zu1 als script expotiert. jobist ist : real NULL

Was macht denn die Query, wenn du es jeweisl auf Integer CASTest in der "IF NOT EXISTS"-Klausel?
---> dads verstehe ich jetzt nicht.

Ich habe das ganze natürlich in meiner testumgebung getestet, dort habe ich halt Integer werte benutzt für jobid. Dort habe ich keine Nachkommastelle
Grüße
Ruffy
Bitte warten ..
Mitglied: Biber
06.05.2011 um 16:34 Uhr
Moin Ruffy,

ja WTF ist denn die Job-ID auf Real aufgeblasen [edit @ blöder Foren-Big-Brother: auf-ge-pustet.... jezz' besser? f*ckU [/edit] ?
Rechnest du denn pessimistisch damit, jemals eine JobId der Form 544534.9182726354 zu bekommen?

Offensichtlich machen die beiden Rechner bei deinen REAL-Zahlen z.B. 544534 irgendwelche Rundungsversuche und sind der Meinung, das vermutlich auf der 87sten nachkommastell irgendetwas unglich 0 stehet (544534.000000....0001).

->Vergleiche also nicht "where Z.jobid = Q.jobid "
-> Sondern : "where Cast(Z.jobid as integer) = cast(Q.jobid as integer)"

[wie auch immer die MSSQL-Syntax dafür lautet - ich hab keinen MSSQL-Server hier.]

Grüße
Biber
Bitte warten ..
Mitglied: Ruffy1984
09.05.2011 um 15:21 Uhr
Hallo Biber,

ich rechne nicht damit, ein Prgramm schreibt daten in die Datenbank und daher kommen auch die Werte.
das mit dem jobid as integer werde ich testen.
Bitte warten ..
Mitglied: Ruffy1984
09.05.2011 um 16:34 Uhr
Hallo Biber ,

nochmal ich.

Das mit der .0 dran hängen hat sich erledigt, das ist nur eine View Sache auf derm SQL Server 2000.

Erkennst du irgendwas falsches einem Code , weil er ja mehrere Datensätze überträgt.
Wenn nur 2 neue Jobids dazugekommen sind , sagt er 33 arrows effected.

Grüße Ruffy
Bitte warten ..
Mitglied: Biber
09.05.2011 um 18:05 Uhr
Moin Ruffy1984,

dumme Frage - ich war nach dem Aufbau deiner Query stillschweigend davon ausgegangen, das die JOBID auch der primary key, der eindeutig identifizierende Schlüssel der Tabelle ist.

Wenn natürlich erst die Kombination von JOBID und APPID oder JOBID und INSTANCE den Dtensatz identififiert, dann wäre das Verhalten mehr als logisch.

Was ist denn der PK?

P.S.
Erkennst du irgendwas falsches einem Code ...
Ich hab nicht mehr soooo verbissen draufgeschaut, nachdem du erzählt hattest, dass du das JOBID-Feld in der Zieltabelle auf REAL geändert hast.
Da dachte ich: Hey, recht hat er. Datenbanken sind ja nichts hochakademisches oder TÜV-geprüftes.... eine gewisser Fuzzy-Logic-Ähnlichkeitswert reicht auch zum Wiederfinden.

Grüße
Biber
Bitte warten ..
Mitglied: MadMax
10.05.2011 um 00:43 Uhr
nabend Ruffy,

um Deinem Problem auf die Spur zu kommen, laß doch einfach mal das "insert" weg und führe nur das "select" aus, dann siehst Du ja, welche Daten in die Zieltabelle geschrieben werden sollen. Ich empfehle Dir drei Abfragen:

01.
Select * from Datenbank.dbo.info Q where NOT EXISTS (Select 1 from [Zielserver].test.dbo.Info Z where Z.jobid = Q.jobid) 
02.
Select * from [Zielserver].test.dbo.Info Z where NOT EXISTS (Select 1 from Datenbank.dbo.info Q where Z.jobid = Q.jobid) 
03.
Select * from Datenbank.dbo.info Q join [Zielserver].test.dbo.Info Z on Z.jobid = Q.jobid
Ausgehend von Deinem ersten Beitrag hätten da wohl 1034, 1002 und 3999 Zeilen zurück kommen müssen.

Du schreibst, Du hast drei Quellserver. Dann nehme ich mal an, daß die anderen zwei Quellserver eben Daten in den Zielserver geschrieben haben, die nicht im dritten Quellserver enthalten sind. Wenn meine Vermutung richtig ist, dann wären das die 1002 Zeilen, die im Zielserver sind, aber nicht im Quellserver.

Wenn meine Vermutung falsch ist, dann kannst Du anhand der Daten aus den drei Abfragen vielleicht erkennen, wo das Problem liegt.

Gruß, Mad Max
Bitte warten ..
Mitglied: Ruffy1984
10.05.2011 um 08:51 Uhr
Hallo Mad Max,

in die Zieldatenbank, was eine testdatenbank ist wird zur Zeit nur von einem Server Daten rein geschrieben. Ich werde aber deine querys mal testen, Das ist ein Guter Lösungsatz um zu gucken welche Daten übertragen werden.
die Zieldatenbank habe ich folgendermaßen erstellt:
CREATE TABLE [test] (
[jobid] [real] NULL ,
[appid] [int] NOT NULL ,
[jobinitfrom] [varchar] (12) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[clientname] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[idataagent] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[instance] [nvarchar] (512) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[backupset] [nvarchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[subclient] [nvarchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[data_sp] [varchar] (144) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[backuplevelInt] [int] NOT NULL ,
[backuplevel] [varchar] (29) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[incrlevel] [int] NOT NULL ,
[jobstatusInt] [int] NOT NULL ,
[jobstatus] [varchar] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[jobfailedreason] [nvarchar] (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[startdateunixsec] [int] NOT NULL ,
[enddateunixsec] [int] NOT NULL ,
[startdate] [datetime] NULL ,
[enddate] [datetime] NULL ,
[durationunixsec] [int] NOT NULL ,
[duration] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[numstreams] [int] NOT NULL ,
[numbytesuncomp] [bigint] NOT NULL ,
[numbytescomp] [bigint] NOT NULL ,
[numobjects] [bigint] NULL ,
[isAged] [int] NOT NULL ,
[isAgedStr] [varchar] (3) NOT NULL
) ON [PRIMARY]
GO


was mir aber gerade auffällt, es existiert kein Primary Key.

Werde später nochmal schreiben, muss jetzt weg.

Grüße
Bitte warten ..
Mitglied: Biber
10.05.2011 um 09:08 Uhr
Moin Ruffy1984,

Zitat von Ruffy1984:

was mir aber gerade auffällt, es existiert kein Primary Key.
#@?!!#
Werde später nochmal schreiben, muss jetzt weg.
....besser is' das....

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Datenbanken
SQL - Abfragen - Mehrere Tabellen - Problem WHERE-Filter
gelöst Frage von Andy1987Datenbanken12 Kommentare

Guten Morgen, ich muss mich derzeit mit SQL-Abfragen rumschlagen, um unsere Inventarisierung etwas Übersichtlicher zu gestallten. Mein Problem ist ...

Entwicklung
SQL Update aus derselben Tabelle
gelöst Frage von winscheilEntwicklung1 Kommentar

Hallo, ich habe folgendes Problem. Ich habe eine Tabelle die folgendermaßen aufgebaut ist. Auftrag Rechnung Position Artikel Kosten NULL ...

VB for Applications
Zelleninhalt von einer Tabelle in die andere kopieren
gelöst Frage von BlimmoVB for Applications2 Kommentare

Hallo zusammen, bin neu hier und probiere seit einiger Zeit mit Excel-Makros herum. Mein Problem: Ich nutze eine InputBox, ...

Datenbanken
Foto aktualisieren in SQL Tabelle
gelöst Frage von Dr.CornwallisDatenbanken2 Kommentare

Liebe Gemeinde, ich habe eine Access Datenbank auf einen SQL Server hochgeladen. In dieser Datenbank gibt es eine Tabelle ...

Neue Wissensbeiträge
MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 4 StundenMikroTik RouterOS4 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 4 StundenSicherheit

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 7 StundenAdministrator.de Feedback6 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Vmware

VMware Desktopprodukte sind verwundbar

Information von Penny.Cilin vor 11 StundenVmware

Die VMware-Anwendungen zum Umgang mit virtuellen Maschinen Fusion, Horizon Client und Workstation sowie die Plattform NSX sind verwundbar. Davon ...

Heiß diskutierte Inhalte
Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail
Frage von ahstaxVisual Studio24 Kommentare

Hallo, ich möchte gerne ein vb.net-Tool schreiben, das am Ende eine Outlook-E-Mail erzeugt. Grundsätzlich ist mir klar, wie das ...

Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server16 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...