Announcement

Collapse
No announcement yet.

Data Dictionary: Verzeichnisstruktur ändern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Data Dictionary: Verzeichnisstruktur ändern

    Hallo allerseits,

    ich habe meine ADT-Tabellen in einem Data Dictionary (ADD) zusammengefaßt. (Leider) stehen die Tabellen nicht im gleichen Verzeichnis wie das ADD sondern in einem Unterverzeichnis. Da (vermutlich dadurch) das Backup und Restore nicht korrekt funktioniert, möchte ich den relativen Pfad (siehe Abbildung) löschen. Leider klappt dies nicht.


    Eigenschaften einer Tabelle
    http://entwickler-forum.de/attachmen...1&d=1263459563

    Weiß jemand, wie's geht? In meiner Not habe ich schon das ADD gepatch. Dies klappt, ist aber bei vielen Dateien recht aufwendig.

    Uli
    Attached Files

  • #2
    backup/restore erstellt seit V9 die Unterverzeichnisse ... welche ADS Version nimmst Du?

    Comment


    • #3
      Hallo Joachim,

      vielen Dank für die Rückfrage.
      Wir haben die Version 8.1 im Einsatz.
      Ich würde gern die Unterverzeichnisstruktur auflösen. Gibt es dafür eine einfache Möglichkeit?

      Uli

      Comment


      • #4
        es gibt derzeit keine einfache Möglichkeit unter Beibehaltung aller Einstellungen. Hmmmm....warum sage ich in Trainings immer, am besten alles, was zur DB gehört, in ein Verzeichnis zu packen Ich habe nachgeschaut: das Property 'relative path' kann nur beim Anlegen einer Tabelle gesetzt werden, nicht mehr nachträglich.

        Ein möglicher Weg: exportiere die Struktur als SQL (rechte maus->generate sql). Dann ändere die Pfade, erstelle damit die Datenbank neu (leere Tabellen).
        Danach hole Dir die Daten über einen Link zur alten DB (insert into mytable select * from olddb.mytable).

        Comment


        • #5
          Hallo Joachim,

          vielen Dank für Deine Hilfe! Ich habe das ADD gepatcht, und es funktionierte anschließend einwandfrei. Allerdings fühlte ich mich dabei recht unwohl. Ein Tippfehler und alles ist hin ...
          Im xBaseForum habe ich den entscheidenden Hinweis erhalten! Man kann sehr wohl den relativen Pfad nachträglich ändern, sogar während des Betriebs, sofern man exklusiven Zugriff auf die Tabelle bekommt! Im Data Architekten kam man mit Hilfe der rechten Maustaste auf eine Tabelle selbige mit dem Eintrag "move" verschieben. Damit klappt es mit wenig Aufwand für ein einzelnes Data Dictionary!

          Hat man viele Data Dictionaries, kann man mit Hilfe des DLL-Aufrufs sich auch eine Routine schreiben, die das Verschieben der Tabellen vornimmt:

          UNSIGNED32 AdsDDMoveObjectFile( ADSHANDLE hDictionary,
          UNSIGNED16 usObjectType,
          UNSIGNED8 *pucObjectName,
          UNSIGNED8 *pucNewPath,
          UNSIGNED8 *pucIndexFiles,
          UNSIGNED8 *pucParent,
          UNSIGNED32 ulOptions );
          Nochmals vielen Dank!

          Uli

          Comment


          • #6
            sh...die Funktion habe ich komplett übersehen. Es gibt sie übrigens auch in SQL, dann lässt es sich einfach(er) scripten.
            execute procedure sp_moveddobjectfile(...)

            Comment


            • #7
              Wie würde denn so ein SQL-Script aussehen, beispielsweise für eine Tabelle, die bisher unter ./Tabellen/Personen.ADT steht und nach ./Personen.ADT verschoben werden soll?

              Comment


              • #8
                Code:
                execute procedure sp_MoveDDObjectFile(1,'personen','.\','personen.adi',null,0)
                oder aber für die gesamte DB, falls die Index-Dateien im gleichen Verzeichnis wie die Tabellen liegen:

                Code:
                declare @tb cursor as select name from system.tables;
                declare @idx cursor as select name from system.indexfiles where [email protected];
                declare @indexfiles string;
                declare @s string;
                try
                  drop table #res;
                catch all
                end try;
                create table #res(tbname cichar(255), success logical, details memo);
                open @tb;
                while fetch @tb do
                  try
                    @s='tablename: '+trim(@tb.name);
                	@indexfiles='';
                	open @idx;
                	while fetch @idx do
                	  @indexfiles=@indexfiles+trim(@idx.name)+';';
                	  @s=@s+' # indexfile: '+trim(@idx.name);
                	endwhile;
                	close @idx;
                	execute procedure sp_MoveDDObjectFile(1,@tb.name,'.\',@indexfiles,null,0);
                    insert into #res values (@tb.name,true,@s);
                  catch all
                    @s=@s+' # Exception: '+trim(__errtext);
                    insert into #res values (@tb.name,false,@s);
                  end try;
                endwhile;
                close @tb;
                select * from #res;
                Zuletzt editiert von Joachim Dürr; 25.01.2010, 13:30. Reason: tags eingefügt

                Comment

                Working...
                X