Reindex aller Tabellen (DBF / CDX)

Advantage Database Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Reindex aller Tabellen (DBF / CDX)

Beitrag von Magic »

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.
Gruß,
Magic
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
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)

Beitrag von nightcrawler »

Nur bei Data Dictionaries, weil hier die Liste der Tabellen bekannt ist:

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;
Aufruf über

Code: Alles auswählen

EXECUTE PROCEDURE ReindexAllTables();
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: Reindex aller Tabellen (DBF / CDX)

Beitrag von Magic »

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.
Gruß,
Magic
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: Reindex aller Tabellen (DBF / CDX)

Beitrag von Magic »

Update:
Ist erfolgreich durchgelaufen. Alle Tabellen haben als Ergebnis den Status success = TRUE erhalten.
Alle .CDX Dateien wurden neu erstellt.
Gruß,
Magic
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: Reindex aller Tabellen (DBF / CDX)

Beitrag von Magic »

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?
Gruß,
Magic
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
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)

Beitrag von nightcrawler »

Magic hat geschrieben:Stellt sich nur noch die Frage, ob ich eine Data Dictionary Verbindung zusätzlich erstellen darf?
Bei DBF wird die Tabellen-Datei unverändert gelassen (außer, Verschlüsselung wird aktiviert). Es schadet also nichts.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: Reindex aller Tabellen (DBF / CDX)

Beitrag von Magic »

Hi,

kann damit jemand etwas anfangen?
Bekomme beim Aufruf meiner Reindex-Procedur im ARC diese Fehlermeldung:
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.
Bin mir nicht schlüssig was das soll, denn das letzte Mal (wann war das noch mal?) hat es problemlos funktioniert.
Gruß,
Magic
UliTs
Der Entwickler von "Deep Thought"
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)

Beitrag von UliTs »

Hallo Magic,

Vermutlich versuchst Du die ReIndex-Prozedur erneut zu erstellen und diese existiert bereits im Data Dictionary!
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten