Reindex aller Tabellen (DBF / CDX)
Moderator: Moderatoren
Reindex aller Tabellen (DBF / CDX)
Hi,
wir haben bereits mehr als 180 DBF’s mit CDX. Kommt zwar selten vor, aber ab und an muss dann doch bei der einen oder anderen Tabelle ein Reindex durchgeführt werden.
Bis dato gehe ich dann über den ARC, wähle die Tabelle aus und reindiziere sie.
Für meine SQL Datenbanken, habe ich eine Prozedur, die ich direkt im SQL Management Studio ausführe. Die Prozedur geht alle Tabellen durch und erstellt den Index jeder Tabelle – falls erforderlich - neu. So brauche ich bei Bedarf eben nur die eine Prozedur ausführen und muss die Tabellen nicht manuell anfassen.
So ein vorgehen würde ich mir für die ADS auch gerne basteln. Aber wie?
Geht so etwas direkt im ARC? Oder wie kann ich es sonst noch lösen um dem manuellen Aufwand zu reduzieren.
wir haben bereits mehr als 180 DBF’s mit CDX. Kommt zwar selten vor, aber ab und an muss dann doch bei der einen oder anderen Tabelle ein Reindex durchgeführt werden.
Bis dato gehe ich dann über den ARC, wähle die Tabelle aus und reindiziere sie.
Für meine SQL Datenbanken, habe ich eine Prozedur, die ich direkt im SQL Management Studio ausführe. Die Prozedur geht alle Tabellen durch und erstellt den Index jeder Tabelle – falls erforderlich - neu. So brauche ich bei Bedarf eben nur die eine Prozedur ausführen und muss die Tabellen nicht manuell anfassen.
So ein vorgehen würde ich mir für die ADS auch gerne basteln. Aber wie?
Geht so etwas direkt im ARC? Oder wie kann ich es sonst noch lösen um dem manuellen Aufwand zu reduzieren.
Gruß,
Magic
Magic
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
Re: Reindex aller Tabellen (DBF / CDX)
Nur bei Data Dictionaries, weil hier die Liste der Tabellen bekannt ist:
Aufruf über
Code: Alles auswählen
CREATE PROCEDURE ReindexAllTables(
tablename CICHAR ( 200 ) OUTPUT,
success LOGICAL OUTPUT,
msg Memo OUTPUT
)
BEGIN
DECLARE @tables CURSOR AS SELECT Name FROM SYSTEM.TABLES;
OPEN @tables;
WHILE FETCH @tables DO
TRY
EXECUTE PROCEDURE sp_Reindex(@tables.Name, 0);
INSERT INTO __output VALUES (@tables.Name, true, NULL);
CATCH ALL
INSERT INTO __output VALUES (@tables.Name, false, __errtext);
END TRY;
END WHILE;
END;
Code: Alles auswählen
EXECUTE PROCEDURE ReindexAllTables();
Re: Reindex aller Tabellen (DBF / CDX)
Hallo Joachim,
vielen Dank für den Code.
Nun habe ich aber noch folgende Fragen dazu:
Bisher habe ich unsere Tabellen im ARC über „Create a connection to a directory of existing tables“ eingebunden.
D.h. ich müsste die Conntection ändern / oder eine neue über Data Dictonary anlagen.
Laufe ich da irgendwo Gefahr, dass ich mit dieser nachträglichen Änderung mir etwas zerschieße? Oder kann ich das Problemlos durchführen.
Auf meinem Test System habe ich dies bereits durchgeführt. Ich habe eine weitere Connection über Data Dictonary angelegt, danach die existierenden Tabellen über Add Existing Tables eingebunden. Die von Dir gepostete Procedure angelegt und gestartet.
Sie läuft noch „Running Query …“ Da keine Zwischenergebnisse ausgegeben werden, kann ich nicht sagen wie weit sie ist, gehe davon aus dass sie tatsächlich gerade rennt
Auf den scharfen System habe ich mich bisher nicht getraut.
Da es sich bei uns um den ADS Ver. 8.1 handelt, gehe ich auch davon aus, dass die Tabellen für die Tabellen dann für die Indexerstellung-/aktuallisierung exklusiv geöffnet werden.
vielen Dank für den Code.
Nun habe ich aber noch folgende Fragen dazu:
Bisher habe ich unsere Tabellen im ARC über „Create a connection to a directory of existing tables“ eingebunden.
D.h. ich müsste die Conntection ändern / oder eine neue über Data Dictonary anlagen.
Laufe ich da irgendwo Gefahr, dass ich mit dieser nachträglichen Änderung mir etwas zerschieße? Oder kann ich das Problemlos durchführen.
Auf meinem Test System habe ich dies bereits durchgeführt. Ich habe eine weitere Connection über Data Dictonary angelegt, danach die existierenden Tabellen über Add Existing Tables eingebunden. Die von Dir gepostete Procedure angelegt und gestartet.
Sie läuft noch „Running Query …“ Da keine Zwischenergebnisse ausgegeben werden, kann ich nicht sagen wie weit sie ist, gehe davon aus dass sie tatsächlich gerade rennt
Auf den scharfen System habe ich mich bisher nicht getraut.
Da es sich bei uns um den ADS Ver. 8.1 handelt, gehe ich auch davon aus, dass die Tabellen für die Tabellen dann für die Indexerstellung-/aktuallisierung exklusiv geöffnet werden.
Gruß,
Magic
Magic
Re: Reindex aller Tabellen (DBF / CDX)
Update:
Ist erfolgreich durchgelaufen. Alle Tabellen haben als Ergebnis den Status success = TRUE erhalten.
Alle .CDX Dateien wurden neu erstellt.
Ist erfolgreich durchgelaufen. Alle Tabellen haben als Ergebnis den Status success = TRUE erhalten.
Alle .CDX Dateien wurden neu erstellt.
Gruß,
Magic
Magic
Re: Reindex aller Tabellen (DBF / CDX)
OK. Habe gerade die Probe gemacht, was passiert wenn die Prozedur gestartet wird und einige Tabellen geöffnet sind.
Ergebnis:
Die Prozedur läuft durch. Bei Tabellen die gerade geöffnet sind wird der Index nicht neu erstellt. Success = FALSE und die Betroffene Tabelle erhält die Message : "HY000 HY000 [iAnywhere Solutions][Advantage SQL][ASA] Error 7008: The specified table, memo file, or index file was unable to be opened. Error executing stored procedure: sp_Reindex".
Also alles gut. Stellt sich nur noch die Frage, ob ich eine Data Dictionary Verbindung zusätzlich erstellen darf?
Ergebnis:
Die Prozedur läuft durch. Bei Tabellen die gerade geöffnet sind wird der Index nicht neu erstellt. Success = FALSE und die Betroffene Tabelle erhält die Message : "HY000 HY000 [iAnywhere Solutions][Advantage SQL][ASA] Error 7008: The specified table, memo file, or index file was unable to be opened. Error executing stored procedure: sp_Reindex".
Also alles gut. Stellt sich nur noch die Frage, ob ich eine Data Dictionary Verbindung zusätzlich erstellen darf?
Gruß,
Magic
Magic
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
Re: Reindex aller Tabellen (DBF / CDX)
Bei DBF wird die Tabellen-Datei unverändert gelassen (außer, Verschlüsselung wird aktiviert). Es schadet also nichts.Magic hat geschrieben:Stellt sich nur noch die Frage, ob ich eine Data Dictionary Verbindung zusätzlich erstellen darf?
Re: Reindex aller Tabellen (DBF / CDX)
Hi,
kann damit jemand etwas anfangen?
Bekomme beim Aufruf meiner Reindex-Procedur im ARC diese Fehlermeldung:
kann damit jemand etwas anfangen?
Bekomme beim Aufruf meiner Reindex-Procedur im ARC diese Fehlermeldung:
Bin mir nicht schlüssig was das soll, denn das letzte Mal (wann war das noch mal?) hat es problemlos funktioniert.poQuery: Error 7200: AQE Error: State = HY000; NativeError = 5154; [Extended Systems][Advantage SQL][ASA] Error 5154: Execution of the stored procedure failed. Error 7200: AQE Error: State = HY000; NativeError = 5132; [Extended Systems][Advantage SQL][ASA] Error 5132: The specified database object name is not valid. Procedure already exists in the dictionary with the same name.
Gruß,
Magic
Magic
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Reindex aller Tabellen (DBF / CDX)
Hallo Magic,
Vermutlich versuchst Du die ReIndex-Prozedur erneut zu erstellen und diese existiert bereits im Data Dictionary!
Uli
Vermutlich versuchst Du die ReIndex-Prozedur erneut zu erstellen und diese existiert bereits im Data Dictionary!
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück