Announcement

Collapse
No announcement yet.

Externe Tabelle anbinden

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

  • #16
    Originally posted by defo View Post
    Du kannst das External Table Interface ändern:
    alter table externeTabelle location ('neu.csv');

    oder Du kannst die Datei umbennen mit utl_file.frename
    ... oder man kann mit Symbolischen Links arbeiten.

    Gruss

    Comment


    • #17
      Hallo,
      nun bin ich auf ein weiteres Problem gestossen. Wenn die csv-Datei in einer Netzwerkfreigabe auf einem anderen Server liegt, kann Oracle hier wohl kein Log erstellen:
      ORA-29913: Fehler bei der Ausführung von Aufruf ODCIEXTTABLEOPEN
      ORA-29400: Data Cartridge-Fehler
      KUP-04063: Log-Datei FAB_2980_5808.log konnte nicht göffnet werden
      BS-Fehler Das System kann die angegebene Datei nicht finden.
      ORA-06512: in "SYS.ORACLE_LOADER", Zeile 19
      29913. 00000 - "error in executing %s callout"
      *Cause: The execution of the specified callout caused an error.
      *Action: Examine the error messages take appropriate action.
      Berechtigt habe ich das Verzeichnis für jeden mit Vollzugriff.
      Kann man die Logfiles auch deaktivieren? Sie stören eigentlich sowieso nur.
      In Dokus habe ich gelesen, dass es hier einen Parameter NOLOG gibt, aber dieser wird nicht akzeptiert.

      Für Tips bin ich dankbar!

      Comment


      • #18
        Originally posted by Chriss View Post
        Berechtigt habe ich das Verzeichnis für jeden mit Vollzugriff.
        Kann man die Logfiles auch deaktivieren? Sie stören eigentlich sowieso nur.
        In Dokus habe ich gelesen, dass es hier einen Parameter NOLOG gibt, aber dieser wird nicht akzeptiert.
        Der Parameter nennt sich glaub ich NOBADFILE und NOLOGFILE.
        Ich habe ehrlich gesagt sowas bis jetzt nur lokal auf dem Server Filesystem gemacht, wusste nicht dass das geht auf Netzlaufwerken.
        Wenn es überhaupt geht auf Netzlaufwerken und Berechtigung = Jeder = Windows Freigabe, hätte ich Zweifel dass das taugt. Jedenfalls gilt für die Logfiles das gleiche Verfahren, wie für die eigentliche Datei, das Verzeichnis muss über ein Oracle Directory Object angegeben werden.
        Das muss dann- wie ich finde inkonsistent- in Hochkommata.
        Wenn das bad- oder logfilename nicht angegeben werden, wird glaub ich automatisch eins anhand des CSV Namens erstellt.

        Kein Log / Badfile zu verwenden ist vielleicht ne Notlösung, aber es kommt bestimmt der Tag, wo Du Dir eins wünscht (gehabt zu haben).

        Der Fehler deutet m.E. darauf hin, dass trotz Berechtigung "Jeder" die Berechtigungen nicht ausreichen.
        Ich würde lokal auf dem Server mit einem eigens definierten Directory für CSV Upload beginnen, inkl Log Files. Wenn das klappt, entsprechend ausbauen.

        Ach und noch was *CSV im Verzeichnis "Jeder darf hier lesen" macht natürlich jeden "Hackerangriff" zum Kindergeburtstag.
        Ich frag mich manchmal, warum ich mich überhaupt frage, wie ebay oder sony seine Millionen Account Daten losgeworden ist.
        Gruß, defo

        Comment


        • #19
          Hallo Defo

          Wenn es überhaupt geht auf Netzlaufwerken und Berechtigung = Jeder = Windows Freigabe, hätte ich Zweifel dass das taugt. Jedenfalls gilt für die Logfiles das gleiche Verfahren, wie für die eigentliche Datei, das Verzeichnis muss über ein Oracle Directory Object angegeben werden.
          das schon, und wenn man es nicht explizit angibt, erstellt ers im selben pfad, wie das csv-File ist.

          Die Logfiles werde ich definitiv nie brauchen, und falls ml doch etwas eintreten sollte, dass ich suie benötige, dann kann ich sie ja wieder aktivieren. Also, kein Logfile zu erstellen, wäre eine Lösung, aber ich weiss nicht, wie das Codetechnisch angegeben werden muss.

          Code:
          CREATE TABLE system.log_table (TEXT VARCHAR2(400))
          ORGANIZATION EXTERNAL (
           TYPE oracle_loader
           DEFAULT DIRECTORY bdump
           ACCESS PARAMETERS (
            RECORDS DELIMITED BY NEWLINE
            NOBADFILE NODISCARDFILE NOLOGFILE
            FIELDS TERMINATED BY '0x0A'
            MISSING FIELD VALUES ARE NULL)
           LOCATION ('alert_orabase.log'))
          REJECT LIMIT unlimited;
          so akzeptiert er es bei mir nicht.

          Comment


          • #20
            Originally posted by Chriss View Post
            Code:
            CREATE TABLE system.log_table (TEXT VARCHAR2(400))
            ORGANIZATION EXTERNAL (
             TYPE oracle_loader
             DEFAULT DIRECTORY bdump
             ACCESS PARAMETERS (
              RECORDS DELIMITED BY NEWLINE
              NOBADFILE NODISCARDFILE NOLOGFILE
              FIELDS TERMINATED BY '0x0A'
              MISSING FIELD VALUES ARE NULL)
             LOCATION ('alert_orabase.log'))
            REJECT LIMIT unlimited;
            so akzeptiert er es bei mir nicht.
            Gibt es dazu eine Fehlermeldung?
            technisch müsste das hinhauen, aber die Werte die Du verwendest erscheinen mir seltsam.
            "system.log_table"
            Wieso machst Du das unter System Schema?
            Wieso nennst Du Deine external table "log_table"
            "default directory bdump"
            Das ist ein Log Verzeichnis der Datenbank selbst, zumindest der gleichnamige Directory Eintrag. Bist Du sicher, dass es sich um ein ORACLE DIRECTORY Object handelt? Zeig mal bitte den Create Code davon.
            "alert_orabase.log"
            das sollte Deine CSV Datei sein (im genannten Oracle Directory 'bdump' bzw. vielleicht besser ein anderes)!

            Willst Du eine Log Datei importieren?
            Irgendwie wirkt das, als wäre Dir nicht klar, was Du da machst. Ok, Namen sind Schall und Rauch, aber wer soll da durchblicken?
            Ach und Fehlermeldungen sind besonders wichtig, die gibt es nicht aus Spaß.

            Und noch der Genauigkeit halber:
            Die Files werden nicht im gleichen Verzeichnis erstellt, wo das CSV File ist, sondern dort wo angegeben, im "Default Directory".
            (Wo natürlich auch das CSV File liegen sollte, wenn nicht anders angegeben)
            Gruß, defo

            Comment


            • #21
              Hallo Defo,

              das war nur das Bsp. von hier.
              Ich hatte meins gerade nicht zur Hand.

              Er kennt "NOLOG" nicht, er erwartet hier andere Angaben.
              Ich habe meinen Code leider gerade nicht zur Hand, reiche diesen aber noch nach.

              Comment


              • #22
                Originally posted by Chriss View Post
                Hallo Defo,

                das war nur das Bsp. von hier.
                Ich hatte meins gerade nicht zur Hand.

                Er kennt "NOLOG" nicht, er erwartet hier andere Angaben.
                Ich habe meinen Code leider gerade nicht zur Hand, reiche diesen aber noch nach.
                Hallo? Jemand zuhause?
                NOLOG ist falsch, so steht es nicht mal in Deinem Beispiel.
                Und wie kommst Du dazu, etwas zu posten, das bei Dir nicht "akzeptiert" wird, ohne dass Du es jemals laufen lassen hast?
                Gruß, defo

                Comment


                • #23
                  Originally posted by defo View Post
                  Hallo? Jemand zuhause?
                  NOLOG ist falsch, so steht es nicht mal in Deinem Beispiel.
                  Und wie kommst Du dazu, etwas zu posten, das bei Dir nicht "akzeptiert" wird, ohne dass Du es jemals laufen lassen hast?
                  wie kommst du darauf, dass ich es nicht laufen lassen habe??? woher soll ich sonst wissen, dass er's nicht nimmt?
                  ich kann nur die Meldung aktuell nicht posten, da ich gerade nicht an das System komme.
                  und ich meinte natürlich NOLOGFILE.

                  Comment


                  • #24
                    So, nun kann ich auch den Code nachreichen:
                    Code:
                    ...
                       ORGANIZATION EXTERNAL 
                        ( TYPE ORACLE_LOADER
                          DEFAULT DIRECTORY "P231_XTA_FOLDER"
                          ACCESS PARAMETERS
                            ( fields terminated by ';'    
                              NOLOGFILE
                            )
                          LOCATION
                           ( 'XTA_1234567.csv'
                           )
                        )
                    und der Fehler, wenn ich auf die Tabelle zugreifen möchte:
                    Code:
                    ORA-29913: Fehler bei der Ausführung von Aufruf ODCIEXTTABLEOPEN
                    ORA-29400: Data Cartridge-Fehler
                    KUP-00554: error encountered while parsing access parameters
                    KUP-01005: syntax error: found "nologfile": expecting one of: "column, enclosed, exit, (, ltrim, lrtrim, ldrtrim, missing, notrim, optionally, rtrim, reject"
                    KUP-01007: at line 2 column 11
                    ORA-06512: in "SYS.ORACLE_LOADER", Zeile 19
                    29913. 00000 -  "error in executing %s callout"
                    *Cause:    The execution of the specified callout caused an error.
                    Zuletzt editiert von Chriss; 21.06.2014, 18:19.

                    Comment


                    • #25
                      ja, Du musst Dich schon an die Vorgaben halten, NOLOGFILE gehört nicht unter die Fields clause. In Deinem eigenen "Offline" Beispiel ist das richtig.
                      Gruß, defo

                      Comment


                      • #26
                        Das hatte ich nicht bedacht. Nun, mit der richtigen Reihenfolge hat es funktioniert. Danke!

                        Jetzt habe ich das Problem, dass er sagt, dass das File nicht vorhanden ist.
                        ORA-29913: Fehler bei der Ausführung von Aufruf ODCIEXTTABLEOPEN
                        ORA-29400: Data Cartridge-Fehler
                        KUP-04040: Datei XTA_1234567.csv in P231_XTA_FOLDER nicht gefunden
                        ORA-06512: in "SYS.ORACLE_LOADER", Zeile 19
                        aber das File ist definitiv da und die Freigabe habe ich auf JEDER mit VOLLZUGRIFF berechtigt.
                        Kann das doch sein, dass Oracle hier keine UNC-Pfade mag?

                        Comment


                        • #27
                          Originally posted by Chriss View Post
                          Das hatte ich nicht bedacht. Nun, mit der richtigen Reihenfolge hat es funktioniert. Danke!

                          Jetzt habe ich das Problem, dass er sagt, dass das File nicht vorhanden ist.

                          aber das File ist definitiv da und die Freigabe habe ich auf JEDER mit VOLLZUGRIFF berechtigt.
                          Kann das doch sein, dass Oracle hier keine UNC-Pfade mag?
                          Ja, das kann sein. Ich hab dazu bereits etwas geschrieben, hab aber keine Lust, das für Dich nachzuschlagen in der Doku.
                          Mach doch einen Test, melde Dich als Oracle App Owner auf der DB Maschine an und schau, ob Du die Datei lesen kannst mit notepad. Wenn nicht, hast Du ein Problem, wenn ja, musst Du weiter nach der Ursache suchen.
                          Ach und eine Freigabe mit Berechitigungen (ich geh mal davon aus, in einer Windows Domäne) hat nichts mit den Rechten einer Datei oder eines Verzeichnisses zu tun. Das sind 2 verschiedene Dinge.
                          Gruß, defo

                          Comment


                          • #28
                            Originally posted by defo View Post
                            Aber wieso soll das nicht multiuserfähig sein?
                            Wenn mehrere User versuchen eine Tabelle mit dem gleichen Namen anzulegen - Peng :-)

                            aber das File ist definitiv da und die Freigabe habe ich auf JEDER mit VOLLZUGRIFF berechtigt.
                            Kann das doch sein, dass Oracle hier keine UNC-Pfade mag?
                            UNC Pfade gehen schon für Directoryobjekte aber nicht Du brauchst Vollzugriff, sondern der technische Oracleuser unter dem die DB läuft.
                            Wird also erwartet, dass man sich am AD angemeldet hat um auf das Netzlaufwerk zuzugreifen hilft auch ein Vollzugriff nichts wenn der lokale Oracleuser nicht im AD bekannt ist (was in der Regel so seien dürfte...)

                            Kopier die Datei über einen Job lokal auf den DB Server und benenne sie in diesem Zuge auch gleich um, dann hast den ganzen Hickhack mit den sich ändernden Dateinamen auch nicht und du kannst deine externe Tabelle so lassen wie sie ist.
                            Zitat Tom Kyte:
                            I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

                            Comment


                            • #29
                              Originally posted by dimitri View Post
                              Wenn mehrere User versuchen eine Tabelle mit dem gleichen Namen anzulegen - Peng :-)
                              Ja, sollte klar sein, dass das nicht geht. Aber das Problem gleichlautender/eindeutiger Dateinamen gibt es seit 30 Jahren oder so. Da sollte es Mittel und Wege geben, für eindeutige Namen zu sorgen.
                              Du hast glaub ich grundsätzlich anfangs in Frage gestellt, ob das Verfahren angemessen ist, was ich wirklich für einen berechtigten Einwand halte, da es verhältnismäßig aufwändig ist. Man sieht das ja auch am Verlauf dieses Threads.
                              Es ist am Ende superschnell und sehr flexibel, gegenüber einem clientseitigen Import. Implementiert man noch die Verarbeitung von komprimierten Dateien, erzielt man weitere Beschleunigung schon vor der Verarbeitung.
                              Bin gespannt, ob der TE es schafft sich da durchzuarbeiten.
                              Gruß, defo

                              Comment


                              • #30
                                im Moment hängt es nur noch daran, welchen User muss ich in der Freigabe eintragen, damit die Datenbank darauf zugreifen darf.

                                Comment

                                Working...
                                X