Jump to content

Tossi65

Members
  • Gesamte Inhalte

    53
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von Tossi65

  1. @NilsK Ich gebe dir recht ohne Datenmodell ist schlecht. Aber ich werde es jetzt mit dem Trigger versuchen. Danke für Eure Unterstützung. Gruß Torsten
  2. @MDD Das habe ich mir mit einem Trigger geholfen. Bei Insert , Update und Delete schreibt der Trigger mir die verwendeten Felder des Schlüssels mit Werten und die Aktion in eine Tabelle. Eine Datumsspalte gibt es nicht. Es sind einfach Verknüpfungstabellen mit einer "n zu m Beziehung". Vielleicht ist der Trigger die einzige Lösung. Gefällt mir aber nicht. Danke Torsten
  3. Hallo an alle, ich gebe euch allen Recht. Aber mir hat man beim Designen einer Tabelle bei gebracht, das eine Tabelle eine eineindeutige Spalte haben sollte(ID, Lfdnr,...). Meist sogar als AutoGenerate für die fortlaufende Nummer. Diese hat nicht unbedingt etwas mit dem prim Key zu tun. Über diese eindeutige ID kann ich den Datensatz direkt ansprechen oder als Offset für Abfragen benutzen. Wenn ich diese Spalte nicht habe wie soll ich folgendes realisieren: "Select Top 1000 * from tabelle where lfdNr > x". Das geht nicht,leider. Der Primary Key besteht aus mehreren Fremdschlüsseln, einer eindeutigen Länderkennung und wird so eindeutig eindeutig. Die Tabellen sind auf mehreren Datenbank-Servern global verteilt. Der zusammengesetzte Prim. Key soll ein zusammenführen der Daten in eine Tabelle ermöglichen (Zentral). Das heisst die Fremdschlüssen werden in der Zentraltabelle mehrfach vorkommen bis auf die Länderkennung! Also Replikation nachgebildet. Die Entwickler sind in Rente oder nicht mehr da. Das ganze ist natürlich historisch entstanden. Das ich jetzt an den Datenbanken kaum etwas machen kann ist mir klar. Aber ich soll das Verteilen und Zusammenbringen der Daten ermöglichen. Mir ist klar, das diese Tabellen eigentlich nur mit einem kompletten Scan von 0 bis n über den prim. Key von der Quelle zum Ziel abzugleichen sind. Wie gesagt mehrere Mio. Datensätze pro Datenbank. Bei den restlichen Tabellen schaue ich einfach auf die max Lfdnr einer Tabelle im Ziel und dann in der Quelle. Daraus ergibt sich der Gap und wird übertragen. Ich hoffe es ist jetzt etwas deutlicher.Noch einmal die Frage: Gibt es von der DBEngine interne Datensaplten die man benutzen könnte? Vielen Dank Torsten
  4. Guten Morgen, ich warte mehrere alte Datenbanken und soll eine Datenabgleich erstellen. Ich kenne die Urheber nicht persönlich, aber dafür deren Fehler. In den Datenbanken gibt es Tabellen, welche einen zusammengesetzten Primary Key besitzen, aber keine eigene eindeutige Identspalte. Wenn ich also einen Datensatz suche finde ich diesen mit dem prim Key. Aber wenn ich die Daten abgleichen soll wird es schwierig. Ich könnte natürlich eine Tabellenscan durch führen, aber nach welcher Spalte soll ich die Daten sortieren. Die Tabellen haben teilweise mehrere Mio. Datensätze. Deshalb lese ich immer 1000 Datensätze ein , vergleiche und wieder 10 Datensätze. Wenn ich das nicht mache, dauert es nicht lang und der Arbeitsspeicher ist am Ende. Nun meine Frage: Ich komme aus der FireBird Welt und da haben die Tabellen von der DBEngine interne Tabellenspalten, z. B. "rdb$Key". Darin ist eine eindeutiger Index den man auch nutzen kann. Gibt es so etwas auch im SQL Server. Gruß Torsten
  5. Danke für Eure Unterstützung. Ich mache hier mal zu. Wir erstellen auf den SQL Servern einen SQL User. Für ein Gruppe in der Domäne ist die Fluktuation der User zu groß. Danke Torsten
  6. ok, verstehe. Ich erstelle das Programm unter dem Admin Account und benutze die Windows Anmeldung für den SQL Server. Somit nimmt er auch die Anmeldung vom Admin. Jetzt starte ich das Programm unter User Schmidt. Dann versucht das Programm auch mit diesem User sich an dem SQL Server, bei Windows Anmeldung, anzumelden. Das schlägt natürlich fehl. Also müsste ich jetzt einen SQL User für die Anmeldung nehmen. Dafür müsste der Admin auch als SQL User angelegt werden. Gruß Torsten
  7. Ich erstelle das Programm mit meinem Account und habe Zugriff als Admin auf den SQL Server. Der User des des Programmes soll diese Berechtigung natürlich nicht haben. Ich weiß ja auch nicht wer das Programm alles benutzt. Ich bin aber nicht berechtigt in der Domäne User, Gruppen und Berechtigungen zu vergeben. Also muss ich nehmen was mir gegeben wird. Da der oben genannte neue User auf ca. 12 SQL Servern über dieses Programm zugreifen soll, muss dieser auf allen SQL Servern als SQL User / lokaler User angelegt werden? Na dann viel Spaß. Gruß Torsten
  8. Damit meine ich einen Windows User in der Domäne. Gruß Torsten
  9. Guten Morgen, ich erstelle ein kleines Programm mit Datenbankzugriff. Bisher habe ich immer Windows-Anmeldung genommen. Für das Programm will ich aber nicht den vom Client PC angemeldeten Benutzer benutzen, sondern einen anderen extra angelegten User. Dieser soll auch per Windows-Anmeldung am Server angemeldet werden. Geht das??? Ich dachte bisher, wenn ich einen User bei "Integrated Security=True" mitgeben wird der angemeldet. Gruß Torsten
  10. Hallo NilsK, Hintergrund ist, das wir mehrere gleiche Datenbanken haben, die aus einer Zentraldatenbank mit Daten versorgt wird. Früher mit der Replikation(Transaktional) und jetzt wird das alles über SSIS Services gemacht. Die alte Replikation ging nicht mehr, weil Fehler in der Datenbankstruktur gemacht wurden. Die Urheber der Replikation sind auch nicht mehr verfügbar. Vielleicht liest das hier ja auch jemand aus dem Developer Team. Danke. Gruß Torsten
  11. Hallo NilsK, ich benutze KeepIdentity, um die Werte zu erhalten, da wir die Daten replizieren wollen. So wie ich das verstehe wird dabei die Befehlszeile "SET IDENTITY_INSERT Tabelle ON". Wenn jetzt ein Fehler bei WriteServer() auftritt, wird dann der Befehl wieder mit "SET IDENTITY_INSERT Tabelle OFF" aufgehoben??? Das ist meine Frage. Gruß Torsten
  12. Guten Tag Kollegen, ich habe da eine wichtige Frage: wenn ich SqlBulkCopy wie folgt verwende: using (var bulkCopy = new SqlBulkCopy(ACon, SqlBulkCopyOptions.KeepIdentity, ATransaction)) Wird dann die KeepIdentity Option für die Tabelle bei Fehler automatisch wieder entfernt? Scheint mir nicht so. Wie kann ich diese Option wieder rückgängig machen? Und einen Guten Rutsch ins neue Jahr ;) Gruß Torsten
  13. Hallo NilsK, nein nicht ganz. Die Version könnte ich auch per Eigenschaften -> Optionen hoch setzen. Soviel ich weiß, müssen wohl auch Änderungen an der Datenbankstruktur gemacht Werden. Z. B. Funktionalitäten müssen geprüft werden, da nicht mehr unterstützt oder überarbeitet. Ich habe mal den Migration Assistenten drüber laufen lassen, der meckert alle Joins, Trigger usw an. Aber bietet leider keine Beispiele an. Wie gesagt da liegen Generationen zwischen den Versionen. Der neue Server bietet nicht mehr den Kompatibilitätsmodus 80 an. Er setzt diesen gleich auf 100 ohne Prüfung ob die DB dann noch richtig arbeitet. Gruß Torsten
  14. Guten Morgen Kollegen, wir müssen unsere MS Sql Server auf den neuesten Stand bringen. Das ist ja kein Problem. Das wurde seit MS 2005 auch brav gemacht. Neue Server-Version installiert und Datenbank reinkopiert. Das war es. So die Datenbank haben die Struktur-Version 80, Server 2005 und wir brauchen die neueste Version 150. Ich komme aus der FireBird Fraktion, da geht das ganz einfach. Backup auf dem alten und Restore auf dem neuen Server. Das war es. Aber Microsoft kann nicht einfach. Hat jemand eine Anleitung oder Tipps wie man es am einfachsten macht? Gruß Torsten
  15. Hallo Kollegen, ich habe eine neue Frage zu dem Thema. Ich benutze ein ForEach Loop über ein Dataset und will die Daten mit einem LookUp in das Ziel schreiben, wenn diese dort nicht vorhanden sind. Das habe ich auch schon hinbekommen. Aber jetzt soll das Feld ID mit einem Offset addiert werden. Das Offset kommt aus der Datenbank und steht in der Variable lOffset. Beim Mappen der Spalten werden nur Spalten zugelassen. 1. Wie berechne ich die neue ID bei jedem Durchlauf vom Loop? Der Loop hat ja leider keine eigenen Variablen und Ereignisse. 2. Wie mache ich die Zuweisung zur Zielspalte. Danke Torsten
  16. Tossi65

    SSIS SQL Task

    Hallo Leute, ich versuche mich gerade in SSIS einzuarbeiten. Vielleicht habe ich mir zu viel zu getraut. Ich habe mir eine Konfig-Tabelle erstellt in der Quelldatenbank erstellt. Diese kann ich auch auslesen und Variablen zu weisen. Es gibt eine globale Variabel "Limit". Diese möchte ich in einem dynamischen SQL Statement für den SQL Task verwenden. "select top ? from Tabelle where spalte1 = ? and spalte2 = ?" Die Fragezeichen für spalte1 und spalte2 werden ersetzt aber das erste Fragezeichen nach Top nicht. Mit dem @ geht es auch nicht. Gibt es dafür eine Möglichkeit. Hier sollte der Wert aus Limit stehen. Danke Torsten
  17. Hallo NilsK, ich bin da ganz bei dir, aber wie du sicherlich gelesen hast, ist die Replikation schon etwas älter. Ich glaube 2012 war der Begin und der ehem. Kollege wusste auch nicht so recht mit Datenbanken und Struktur bescheid. Vielleicht auch aus der Historie heraus. Zusätzlich sind nicht alle globale Verbindungen so gut, das man eine Datenbank lokal verwenden kann, wenn es auf Taktzeiten ankommt. Auch heute stören uns noch Latenzen zu den einzelnen Standorten. Da macht eine Replikation die Sache schon entspannter. Wenn richtig konzipiert. Hier werden von den Satelliten die Daten in die jeweiligen Tabellen auf dem Zielserver geschrieben. D. h. 6 Satelliten Tabelle A auf Zielserver in eine Tabelle A. Und kein eindeutiger Inde nur einen zusammengesetzten aus einer Nummer und einer TestSystemID. Die Nummer läuft von 0 bin nnnnnn und die TestSystemID von 1 bis 6. Beides sind eigenständige Spalten. Ich habe gelernt das die Spalte eindeutig sein muss und nicht ein Index. Aber ????? Deshalb mein Vorschlag auf das oben genannte Vorgehen. Das würde uns die Sache vereinfachen. Gruß Torsten
  18. Hallo Kollegen, ich habe da eine nicht alltägliche Frage. Hintergrund: In meiner Firma werden seit über 10 Jahren Daten auf verschiedene Server(Satelliten) repliziert. Das geht auch ganz gut. Aber es werden auch Daten von den Satelliten wieder zurück repliziert in eine Datenbak und verschieden Tabellen. Das ist der böse Punkt. Bei der Datenbankstruktur sind nach heutigen Erkenntnissen markante Fehler gemacht worden. Tabellen haben keine eindeutige Indexspalte. Dies gilt auch für die Zieltabellen für die Replikation zurück. Ausserdem wurde es versäumt Nummernkreise für die einzelnen Satelliten für diese Zieltabellen anzulegen. Ich weiß nicht wie das mal funktioniert hat, aber jetzt geht es nicht mehr. Und wir bekommen es auch nicht ans Laufen. "Dopplete ID ...." Ein reparieren der Fehler ist nicht so einfach, da die Datenbank ca 250 GB groß ist und ca 25 Applikationen darauf zugreifen. Die Replikation umfasst 6 Satelliten. Meine Idee wäre es einen Service zu erstellen, der nach Speicherung der Daten in der Datenbank auf den Satelliten angetriggert wird und die Daten an die Zieldatenbank überträgt und vorher die ID's usw. anpasst Ich kenne das von den FireBird Datenbanken, Da gibt es ein Eventalerter, der Anwendungen ansteuern (benachrichtigen) kann. Aber gibt es so etwas auch für den SQL Server?? Oder habe ich dafür andere Möglichkeiten?? Werkzeug: SQL Server 2012 und Visual Studio 2022. SQL Server wird demnächst migriert auf den aktuellen. Für Vorschläge wäre ich dankbar. Gruß Torsten
  19. Hallo NilsK, da bin ich ganz bei dir. Aber wenn die Verbindungen nach USA oder noch schlimmer China so mies sind, ist es besser Daten vor Ort vor Produktionsbeginn zu haben. Gruß Torsten
  20. @Sunny61 Das ist uns bekannt und wir müssen die SQL Server erneuern. Ist in Vorbereitung. Aber der Crash kam schneller. Ausgelöst durch ein MS Server Update. Gruß Torsten
  21. Guten Morgen, @Dukel: Microsoft SQL Server 2012 (SP2-GDR) (KB3194719) - 11.0.5388.0 (X64) Sep 23 2016 16:56:29 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor) Die Replikation ist transactional und mit subscriber push. Die anderen Datenbankserver sind genauso ausgestattet. @Sunny: Ja ich gebe dir recht. Der Kollege, der das vorher gemacht hat, ist leider verstorben und hat kaum Doku hinterlassen. Ich kenne die Replikation nur von MySQL und die ähnelt MS kaum. Einen Berater wollen wir auch zu ziehen, aber meist kommt erst der Crach. Und die Datenbank um die es sich handelt ist eine ProduktionsDB. Deshalb der Druck. Gruß Torsten
  22. Hallo Leute, mein Vorgänger hat einige Datenbanken repliziert. Ich kennen mich mit der Replikation von MS nicht aus, nur mit MySQL. Hat jemand dazu eine vernünftige deutsche Dokumentation? Irgendwie scheint dieses Thema nur beiläufig erwähnt zu werden. Wir haben nach einem DC Crash mega Stress mit der Replikation. Wir bekommen Sie einfach nicht zum Laufen. Im Gegenteil, sie hat auf unserer deutschen Seite Daten gelöschte, welche nicht gelöscht werden sollten. Nun müssen wir einen Weg finden das wieder rückgängig zu machen. Zum Glück haben wir noch einen Datenbestand von vorm crash. Aber wir wollen, das das nicht noch einmal passiert. Warum werden Tabellen gelöscht wen die Daten repliziert werden??? Haben wir einen falschen Haken gesetzt? Danke Torsten Was würde eigentlich passieren, wenn ich ein älteres Backup der Zieldatenbank wiederherstelle?. Startet die Replikation dann automatisch wieder von vorn ohne die Daten in den Zieltabellen zu löschen???
  23. Tossi65

    Datenbank Wartung?

    Der Kollege weilt leider nicht mehr unter uns. Ich habe die Anwendung als auch die Datenbanken mit kaum Doku geerbt. Aber ich wurschtel mich schon durch mit eurer Hilfe
  24. Tossi65

    Datenbank Wartung?

    Danke für die Informationen. Ich werde mir diese in den nächsten Tagen genau anschauen. Vielen Dank Noch eine Frage: Wenn ich die Datenbank mit BackUp / Restore bearbeite, werden dann die Indizes defragmentiert? Und etwaige Fehler auch behoben???
  25. Tossi65

    Datenbank Wartung?

    Hey, das kann ich nicht sagen. Wie kann ich das kontrollieren? Das Management Studio habe ich auf allen Servern zur Verfügung. Ich kenne mich mit den Tools zu MS SQL nicht so aus. Danke
×
×
  • Neu erstellen...