Jump to content

Tossi65

Members
  • Gesamte Inhalte

    53
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von Tossi65

  1. Tossi65

    Datenbank Wartung?

    Guten Morgen, ich habe eine Frage zu einer MS SQL Datenbank. Ich persönlich komme aus dem Interbase / Firebird Umfeld. Unsere Datenbanken sind alle MS Sql basierend. Sie werden schon über Jahre betrieben. Sie sind indiziert, zwar mit Indezes aus mehreren Feldern davon halte ich gar nichts, aber sie haben Indezes. Unsere Kollegen beschweren sich aber immer mehr, dass Wartezeiten auf Daten aus der Datenbank teilweise lange dauert. Ich kann keine Fehler in der Datenbank entdecken. Im "Activity Monitor" sehe ich aber SQL Statements, meistens Updates bzw. Inserts, die bis zu 4 Sekunden dauern. Eine Firebird Datenbank würde man bei diesen Symptomen mit einen BackUp / Restore wieder reorganisieren, wegen den internen Transaktionsketten. Geht dies auch mit SQL Datenbanken? Welche Möglichkeiten habe ich hier? Ich muss mich auf MS SQL Datenbanken einarbeiten. Danke für Eure Hilfe. Torsten
  2. Danke, jetzt wird es klarer. Schönes Wochenende
  3. Guten Morgen, ich arbeite mich tiefer in TSQL ein und betreue eine MS SQL Datenbank. Darin befindet sich eine gespeicherte Prozedur, die ich nicht ganz verstehe. Dabei brauche ich eure Unterstützung. ALTER PROCEDURE [dbo].[usp_PTrackDocumentsGetPending] as ;with existing_docs(doc_type, doc_num, doc_ver) as ( select doc_type, doc_num, doc_ver from ORD_Documents ) select pt_ord_num = substring(ord_num, 5, 12) , mat_num = substring(z.mat_num,11,18) , Z.doc_type, Z.doc_num, Z.doc_ver--, z.docnum , upload = (case when ed.doc_num is null then 1 else 0 end) FROM ORD_Order_Header AS H join XFR_Z1docum AS Z on z.docnum = h.docnum and z.hasDocument = 1 left outer join existing_docs ed on ed.doc_type = z.doc_type and ed.doc_num = z.doc_num and ed.doc_ver = z.doc_ver where h.crt_dt >= getdate()-7 order by pt_ord_num desc --and ed.doc_num is null Was bewirkt die ";with " Anweisung? Im meinem SQL Server Buch steht natürlich darüber nichts. Danke für Eure Unterstützung.
  4. Vielen Dank, ich habe es gefunden.
  5. Da ich folgende Abfrage verwende: select TOP 100 * from protokoll where Format(datum,'dd.MM.yyyy') = '10.06.2021' order by datum erhalte ich natürlich nicht das richtige Ergebnis.
  6. Und wie kann ich das vermeiden???
  7. Hallo Kollegen, ich verliere gleich den Verstand. Ich habe eine Tabelle erstellt mit einer DateTimspalte. Aus dem Programm füge ich per Insert ein Datum ein cmd.Parameters.AddWithValue("@datum", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")); In der Tabelle steht dann: WArum sind Mnnat und Tag vertauscht??? Bei dem SQL Statement ist alles richtig "2021-06-10 ..." Mfg Torsten
  8. Guten Morgen, Ich möchte unserem Supporter und dem KeyUser an der Linie HIlfsmittel an die Hand geben, um das Problem schnellst möglich zu beheben. Dazu gehört auch eine Abbildung der Situation auf dem SQL Server. Diese Leute haben nicht die Berechtigung für die Server. Die Supporter kommen teilweise nicht mal aus unserer Firma. Wenn sie den Fehler nicht beheben können sollen sie den nächsten Level des Supports anrufen. Gruß Tossi
  9. Guten Morgen, meine Frage lautet: geht das überhaupt mit den MS MMO's? Ich habe noch nicht mit diesen Package gearbeitet. Gibt es da Erfahrungen? Mfg Tossi
  10. Nein. DIe Linie besteht aus einem MasterPC und mehreren Clients. Alle PC's haben eine Datenbankverbindung. All das kann ich auch im Monitor vom dem SQL Management Studio sehen, aber eben auch alles andere. Ich möchte diesen Monitor mit den MMO nachbauen, wenn es geht und nur auf diese Datenbank für die Linie beschränken. HIntergrund: Es kommt hin und wieder vor, das eine SQL Abfrage, welche alltäglich läuft, einfach hängen bleibt. Das Herunterfahren aller Linien PC's für den Neustart hilft nichts. Es muss dann eben der SQL Prozess für diese Abfrage gekillt werden. Warum diese Abfrage auf einmal hängen bleibt haben wir noch nicht herausgefunden. Gruß Torsten
  11. Hallo NilsK, c# ist meine favorisierte Programmiersprache bei diesem Projekt. Und es geht am schnellsten. Denke ich. Ziel ist es eine Anzeige zu bekommen von dem Datenbankserver für eine bestimmte Datenbank(LinienDB) und damit verbundene Clients. Wie gesagt es soll dem Support dienen. Gruß Tossi
  12. Hallo Dukel, doch aber nicht an den Produktionslinien. Das Tool soll für den Support zu Verfügung gestellt werden. Das sind keine Administratoren. Mfg Tossi65
  13. Guten Morgen Leute, hat jemand von Euch schon ein Programm mit .Net(c#) zum überwachen eine SQL Servers erstellt? Ich stelle mir das so vor: Wir haben einen MasterPC auf dem eine Anwendung läuft. Diese Anwendung benötigt eine Datenbank auf einem MS SQL Server. Ich möchte ein Formular erstellen, welche die Aktivitäten auf dieser Datenbank anzeigen. Hintergrund: es kommt hin und wieder vor, das ein Prozess(select...) eines Clients hängen bleibt und somit den Neustart dieser verteilten Anwendung erheblich stört. Ich will das ganze nur als Information anzeigen und zu Supportzwecke nutzen. Mfg Tossi
  14. Hallo Nils, das Problem ist folgendes: Die genannte Prozedur löst auf einer Datenbank beim Kunden in den USA folgenden Fehler aus: Msg 468, Level 16, State 9, Procedure getDeviceTypeFromSAPWithID, Line 47 Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation. Ich habe nach dem Fehler geforscht und richtig: Die Datenbank Collation und Tabellenspalten Collation weichen voneinander ab. Da wir die Datenbank erst dieses Jahr wirklich aktiv nutzen, ist das vorher nicht aufgefallen. Trotzdem sind schon Daten in der Datenbank, welche wir nicht verlieren dürfen. Also die Tabellenspalten lassen sich nachträglich nicht so einfach auf eine neue Collation umsetzen. Datenbank meckert. Aber laut Stack Overflow kann man das auch anders lösen: https://stackoverflow.com/questions/1607560/cannot-resolve-the-collation-conflict-between-sql-latin1-general-cp1-ci-as-and ALso wollte ich laut Anweisung vorgehen. Aber es scheint nicht zu gehen. Oder siehst Du eine andere Lösung. Danke Torsten
  15. Hallo Kollegen, ich habe die Aufgaben von meinem verstorbenen Kopllegen übernommen. Ich bin leider noch kein MS SQL Profi. Ich habe meine Ausbildung auf andere Datenbanken gemacht. Aber nun zum Thema. Eine StoreProcedur erzeugt oben genannten Fehler und das stimmt auch. Die Database defaut Collation ist SQL_Latin1_General_CP1_CI_AS benutz wurde in einigen Tabellen Latin1_General_CP1_CI_AS. Tja und nun auf einmal wird der obige Fehler bei gebrauch der Prozedur ausgelöst. Einen Workaround habe ich gefunden und würde diesen auch anwenden. Aber SQL ManagementStudio kann irgendwie die Zeilen nicht richtig Zählen. USE [DB] GO /****** Object: StoredProcedure [dbo].[getDeviceTypeFromSAPWithID] Script Date: 2/14/2020 11:44:58 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[getDeviceTypeFromSAPWithID] ( -- Add the parameters for the function here @myreturn smallint OUTPUT , @myreturntext varchar(255) output, @DeviceType_Bez varchar(64) output, @DeviceType_id smallint output, @SAPDeviceType_bez varchar(64), @SAPDeviceType_id smallint output, @MerkmalValues varchar(max), @TestSystemLocation_bez varchar(32) ) AS BEGIN DECLARE @l_cnt int, @l_cnt2 int, @l_cnt3 int, @l_cnttmp int, @l_TestSystemLocationDummy_bez varchar(32); SET @myreturn = 0 SET @myreturntext = N'NoError' BEGIN TRY -- SAPDeviceTypeID bestimmen SET @SAPDeviceType_id = (SELECT SAPDeviceType_id FROM p_SAPDeviceType WHERE SAPDeviceType_Bez = @SAPDeviceType_bez) -- Auftrennen der Zeichenkette mit den Bedingungen in Key/Value Paare nach #SplittedValues SELECT * INTO #SplittedValues FROM Split(';', @MerkmalValues) -- Hier knallt es -- Temporäre Tabelle für die Ergebnisse der einzelnen Vergleiche CREATE TABLE #tmpDeviceType ( sSAPDeviceType_bez varchar(64) , SAPDeviceType_id smallint , sDeviceType_bez varchar(64) , DeviceType_id smallint ) -- Selektieren von SAPDeviceType nach DeviceType Mappings welche den Key/Value Bedingungen entsprechen INSERT INTO #tmpDeviceType (sSAPDeviceType_bez, SAPDeviceType_id, sDeviceType_Bez, DeviceType_id) SELECT p_SAPDeviceType.SAPDeviceType_bez, p_SAPDeviceType.SAPDeviceType_id , p_DeviceType.DeviceType_bez, p_DeviceType.DeviceType_id FROM p_SAPDeviceType_Location INNER JOIN p_SAPDeviceType ON p_SAPDeviceType_Location.SAPDeviceType_id = p_SAPDeviceType.SAPDeviceType_id INNER JOIN p_DeviceType ON p_SAPDeviceType_location.DeviceType_id = p_DeviceType.DeviceType_id INNER JOIN p_TestSystemLocation on p_SAPDeviceType_Location.TestSystemLocation_id = p_TestSystemLocation.TestSystemLocation_id INNER JOIN p_SAPMerkmal on p_SAPDeviceType_Location.Merkmal_id = p_SAPMerkmal.merkmal_id INNER JOIN p_SAPMerkmalWert on p_SAPDeviceType_Location.Merkmalwert_id = p_SAPMerkmalWert.merkmalwert_id INNER JOIN #SplittedValues on p_SAPMerkmal.merkmal_bez = #SplittedValues.[key] AND p_SAPMerkmalWert.merkmalwert_bez = #SplittedValues.value WHERE p_TestSystemLocation.TestSystemLocation_bez collate database_default = @TestSystemLocation_bez AND p_SAPDeviceType.SAPDeviceType_bez collate database_default = @SAPDeviceType_bez AND p_SAPDeviceType_Location.[enabled] = 1 -- Wenn keine Einträge für TestSystemLocation gefunden, dann mit Default Location ID = 0 (MASTER - GER) probieren SET @l_cnttmp = (SELECT COUNT(*) FROM #tmpDeviceType) IF @l_cnttmp = 0 BEGIN SET @l_TestSystemLocationDummy_bez = (SELECT TestSystemLocation_bez FROM p_TestSystemLocation WHERE TestSystemLocation_id = 0) INSERT INTO #tmpDeviceType (SAPDeviceType_bez, SAPDeviceType_id, DeviceType_Bez, DeviceType_id) SELECT p_SAPDeviceType.SAPDeviceType_bez, p_SAPDeviceType.SAPDeviceType_id , p_DeviceType.DeviceType_bez, p_DeviceType.DeviceType_id FROM p_SAPDeviceType_Location INNER JOIN p_SAPDeviceType ON p_SAPDeviceType_Location.SAPDeviceType_id = p_SAPDeviceType.SAPDeviceType_id INNER JOIN p_DeviceType ON p_SAPDeviceType_location.DeviceType_id = p_DeviceType.DeviceType_id INNER JOIN p_TestSystemLocation on p_SAPDeviceType_Location.TestSystemLocation_id = p_TestSystemLocation.TestSystemLocation_id INNER JOIN p_SAPMerkmal on p_SAPDeviceType_Location.Merkmal_id = p_SAPMerkmal.merkmal_id INNER JOIN p_SAPMerkmalWert on p_SAPDeviceType_Location.Merkmalwert_id = p_SAPMerkmalWert.merkmalwert_id INNER JOIN #SplittedValues on p_SAPMerkmal.merkmal_bez = #SplittedValues.[key] AND p_SAPMerkmalWert.merkmalwert_bez = #SplittedValues.value WHERE p_TestSystemLocation.TestSystemLocation_bez = @l_TestSystemLocationDummy_bez AND p_SAPDeviceType.SAPDeviceType_bez = @SAPDeviceType_bez AND p_SAPDeviceType_Location.[enabled] = 1 END -- Anzahl der übergebenen Merkmalskombinationen bestimmen SET @l_cnt = (SELECT COUNT(*) FROM #SplittedValues) SELECT SAPDeviceType_bez, SAPDeviceType_id, DeviceType_bez, DeviceType_id, COUNT(*) AS [count] INTO #tmpCnt FROM #tmpDeviceType GROUP BY SAPDeviceType_bez, SAPDeviceType_id, DeviceType_bez, DeviceType_id SET @l_cnt2 = (SELECT MAX([count]) FROM #tmpCnt) IF @l_cnt2 < @l_cnt BEGIN SET @DeviceType_bez = '-' SET @DeviceType_id = -1 END ELSE BEGIN IF @l_cnt2 > @l_cnt BEGIN SET @DeviceType_Bez = '+' SET @DeviceType_id = -1 END ELSE BEGIN -- Es gibt zumindest einen DeviceTyp, der genau die angegebenen Bedingungen erfüllt SET @l_cnt3 = (SELECT COUNT(*) FROM #tmpCnt WHERE [count] = @l_cnt2) IF @l_cnt3 > 1 BEGIN SET @DeviceType_Bez = '+' SET @DeviceType_id = -1 END ELSE BEGIN SET @DeviceType_Bez = (SELECT DeviceType_Bez FROM #tmpCnt WHERE [count] = @l_cnt) SET @DeviceType_id = (SELECT DeviceType_id FROM #tmpCnt WHERE [count] = @l_cnt) END END END DROP TABLE #tmpDeviceType DROP TABLE #tmpCnt END TRY BEGIN CATCH SET @myreturn = (SELECT ERROR_NUMBER()) SET @myreturntext = (SELECT ERROR_MESSAGE()) END CATCH END GO Dort wo "--Hier knallt es" ist die besagte Stelle. Ich habe der temporären Tabelle bei den varchar Spalten ein "collate database_default" angefügt. Hat nichts gebracht. Das Selbe habe ich bei "where Feldname collate database_default= bla" gemacht. Auch kein Erfolg. Die Zeile mit dem Fehler bleibt und stehet immer noch zwischen den Anweisungen. Da ist mir folgendes aufgefallen: SELECT * INTO #SplittedValues FROM Split(';', @MerkmalValues) Markvalues wird per Eingansparameter übergeben in SplittedValues mit Split(...) aufgeteilt. OK! Aber was ist SplittedValues??? Ich habe keine Declaration einer temp. Tabelle gesehen?? Kann hier der Fehler passieren? Vielen Dank Torsten
  16. Guten Morgen wi-ra, diese Option habe ich vorgeschlagen, aber die Obrigkeit will das nicht. Dagegen konnte ich nicht argumentieren, Was meinst Du da arbeitet "jemand" mit / gegen?
  17. Guten Morgen wi-ra, das Problemm wird immer bizzarer. Die eine Replikation, welche vorher gestört war, ist nun grün und keine Fehler. Aber es werden keine Daten übermittelt. Bei sder 2. Replikation, welche einen Fehler mit einem schon vorhandenen Eintrag in einer Tabelle meldet, zeigt auf 2. Tabellen. Im Fehlertext vom Agenten steht Tabelle a. Werte ich die Transaktion mit dem Command ID aus, wird dort eine andere Tabelle genannt. Wie soll man da richtig vorgehen??? Mfg Torsten
  18. Hallo wir-ra, ich habe vollzugriff. Das neue betanken der Zieldatenbank ist nicht so einfach. Wie gesagt, dort laufen aus verschiedenen Standorte die Daten zusammen. Einfacher wäre es die Methode dem Bearbeiten der zu übertragenden Daten. Gibt es dazu keine Anleitung??
  19. Guten Morgen wi-ra, ich habe zugriff aus alle beteiligten Datenbanken. Ich komme auch auf allen Servern an die distribution Datenbank heran.
  20. Ja das hast du richtig verstanden. Die Resultate werden in einer Datenbank zusammengeführt. Die Tabellen sind überall gleich nur die Datenmenge ist durch where ... unterschiedlich und werden übertragen. Fakt ist das eine Tabelle der Meinung ist, das der neue Eintrag schon vorhanden ist. Jetzt möchte ich diesen Eintrag für diese Datenmenge ermitteln und aus den Commands deaktivieren. Wenn es geht?! ,
  21. Hallo wi-ra, da wir die Datenbanken von den Standorten zu uns replizieren, sind diese unterschiedlich groß. Im Schnit ca 200 bis 500 MB. Aber sie werden alle gemeinsam in eine Zieldatenbank repliziert und die hat schon ca 1,5 GB. Mich interessiert meht die distributio n DB. So wie ich es gelesen haben stehen dort die Commans drin. Wie und wo kann ich da eingreifen???? Die Beschreibung im Internet sind alle nicht so recht zielführend. Den Command über Transaction und CommandID zu identifizieren hat zu verschiedenen Ergenbnissen geführt. Als Ursache wurden 2 verschiedene Tabellen genannt. Mfg Torsten
  22. Hallo DerFrank, ich habe den Eintrag in der Tabelle gefunden, zielseitig. Leider kann ich diesen Eintrag nicht löschen, da er Abhängigkeiten zu anderen Einträgen hat. Mist. Wie und Wo kann ich den Befehl(Command) finden, damit ich diesen Inaktiv oder so setzen kann??? In MySQl setzt man einfach die Abarbeitung auf die nächste Sequenznummer(Step) Wie geht das bei MS SQL???? Noch komischer ist der Umstand, das in der Fehlermeldung einen andere Tabelle genannt wird als in dem betreffenden Command?? Alles etwas verwirrend, Aber es muss doch gehen. Die Kollegen sind schon sauer weil die Replikation seit Wochen nicht richtig läuft.
  23. Hallo MDD, wenn ich wüsste welchen Datensatz die Replikation in der Zieltabelle einfügen will, dann kann ich auch eingreifen. Der Key liegt bei der Tabelle auf dem Feld ID und diese Werte sind natürlich schon drin. Seit dem Jahr 2012! Microsoft scheint hier wieder einen nicht aussagekräftige Meldung auszugeben. Kann man die letzte übetragende ID der Quelle ermitteln??? Mdg Torsten
  24. Hallo DerFRank, das weiss ich auch. Aber wie löse ich das Problem wieder auf. Agenten neustart bringt nichts. Neuer Snapshot bringt auch nichts. Ich habe verschiedene Szenarien durch aber ohne erfolg. Wie bekomme ich den vermeindlichen Datensatz heraus????
×
×
  • Neu erstellen...