2016-08-06 17 views
0

Ich bin mir sicher, dass dies wahrscheinlich SQL 101 ist, aber Google-Suchen finden immer Einträge zum Erstellen von Logins. Lassen Sie mich einen kurzen Überblick geben.Erstellen von Protokolldateien in SQL Server 2012

Ich bin aufgrund der Notwendigkeit detaillierterer Berichte, die unsere Systeme liefern können, in die SQL-Berichterstellung des allgemeinen IT-Supports eingedrungen. Meine Firma betreibt Freizeitzentren und wir nutzen sehr hilfreich 3 verschiedene Freizeitmanagementsysteme an mehr als 70 Standorten. Alle 3 sind SQL-basiert, aber machen den gleichen Job auf sehr unterschiedliche Weise. Ich habe viele Berichte in SSRS erstellt, aber die 2 oder 3, die ich gemacht habe, dass der Zugriff auf alle Systeme sehr, sehr zeitaufwendig ist, und nur ein Link bedeutet, dass der gesamte Bericht nicht zugänglich ist.

Eine Anfrage, Daten an Dritte zu Marketingzwecken zu senden, zwingt uns, endlich die Zentralisierung von Daten aus allen Systemen zu betrachten, um die Berichterstellung zu vereinfachen. Es wird nur im Wesentlichen 2 Tabellen geben - 1 für Mitgliedschaftsdetails und 1 für Aktivitäten. Ich habe es schwer gemacht, eine Ansicht zu erstellen, die die gleichen Informationen von jedem der 3 Systeme erzeugt und eine zentrale Datenbank einrichtet, um die Daten zurück zu bringen. Auf jedem System wird eine gespeicherte Prozedur ausgeführt, die eine Tabelle mit Datensätzen des vorherigen Tages füllt. Es wird dann einen Job auf dem zentralen Server geben, der Daten aus diesen Tabellen kopieren und nach der Übertragung entfernen wird. So weit (relativ) einfach.

Das Problem ist, dass der zentrale Server versuchen wird, Daten von über 60 Servern abzurufen - alle mit ihren eigenen Netzwerkverbindungen. Einige Standorte sind remote mit schlechten DSL-Verbindungen, so dass es vorkommen kann, dass einige der Daten nicht vom geplanten Job kopiert werden können. Ich bin froh, dass ein SQL-Agent-Job diese als Schritte haben kann und eine fehlgeschlagene Verbindung den gesamten Prozess nicht stoppt, aber meine Sorge ist, dass die Fehlerbehebung, wenn etwas schief geht, schwierig wird, wenn ich keine Art von Protokollierung erhalte.

Die gespeicherten Prozeduren, obwohl SQL kompliziert, sind nur Update/Einfügen von Datensatzaufträgen. Was hilfreich ist, ist, dass der Aktualisierungsjob in eine Protokolldatei schreibt, die irgendwie berichtet, dass sie 20 Zeilen betroffen hat. Der Einfügejob hat 100 Zeilen betroffen. Grundlegende Sachen, aber ich habe keine Ahnung, wie ich das mache. Was auch nützlich wäre, ist eine Art Warnung, wenn einer der Schritte fehlschlägt. SQL Agent wird helfen, aber ich möchte so viel Ausfallsicherheit wie möglich aufbauen, während ich in der 3-Server-Phase bin, bevor ich auf die Serverstufe 60+ übersetze.

Alle Hinweise in die richtige Richtung würden sehr geschätzt werden. Meine SQL-Kenntnisse sind autodidaktisch (mit einer Menge Stack Overflow-Hilfe!) Und obwohl ich in den letzten Wochen eine Menge über das Erstellen komplizierter Ansichten und Abfragen gelernt habe, waren die meisten meiner SQL-Abfragen nur für SSRS, also ist das alles neu für mich.

Vielen Dank.

Antwort

0

Die output clause erhalten Sie, was Sie für die Protokollierung möchten. Was Sie tun können, ist zu erfassen, was Ihre Aussage macht. Im Folgenden finden Sie ein Beispiel für das Durchführen einer Aktualisierung und das Erfassen der Änderungen in einer Protokolltabelle.

Was Fehlerbehandlung und Ausfallsicherheit betrifft, würde ich einen Blick in die Verwendung von SSIS zur Durchführung Ihrer ETL werfen. SSIS bietet Ihnen eine viel robustere Funktionalität für die Fehlerbehandlung.

-- Create Temp Tables 
CREATE TABLE #myLog 
(
    id int, 
    oldVal int, 
    newVal int 
); 

CREATE TABLE #myTable 
(
    id int, 
    val int 
); 

-- Add Values to #myTable 
INSERT INTO #myTable VALUES 
(1, 1234), 
(2, 1234); 

-- Output Contents of #myTable 
SELECT * FROM #myTable; 

-- Update #myTable & Capture Changes 
UPDATE #myTable 
SET val = 12345 
OUTPUT 
    inserted.id, 
    deleted.val, 
    inserted.val 
    INTO #myLog 
WHERE id = 2 

-- Output Contents of #myTable and #myLog 
SELECT * FROM #myTable 
SELECT * FROM #myLog 

-- Drop Temp Tables 
DROP TABLE #myLog 
DROP TABLE #myTable 
+0

Vielen Dank - gibt mir nur die Informationen zu beginnen zu graben herum, die ich suchte. – DaveBulwer

+0

Bekam meinen Kopf um das Konzept und habe jetzt eine schöne Log-Tabelle mit einer Liste von eindeutigen Referenzen und ob sie eingefügt wurden oder mit Datum und Uhrzeit aktualisiert wurden. Genau das, was ich wollte - nochmals vielen Dank. Tut mir leid, es wird mich nicht zulassen, dass Sie mir Bericht erstatten, da ich selbst nicht hoch genug bin. – DaveBulwer