Announcement

Collapse
No announcement yet.

Suche nach Daten in einer Oracle-DB

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

  • Suche nach Daten in einer Oracle-DB

    Hallo zusammen,

    ich habe folgendes Problem:

    Ich soll in einer mir unbekannten Oracle-Datenbank nach bestimmten Daten Suche, wo ich nicht weiß, in welchen der 100ten Tabellen sich die Daten befinden.
    Kurzum: Gibt es einen SQL Befehl, mit dem ich nach bestimmten Daten durch alle Tabellen einer Oracle-Datenbank suchen kann, und als Ergebnis herauskommt: Die gesuchten Daten befinden sich in der Tabelle(n) xxxx

    Vielen Dank für Eure Bemühungen

    Gruß HPeters

  • #2
    - In allen Tabellen und und in allen Spalten ? Das wird lustig :-). Du musst dir eine dynamisches SQL zusammenbauen, welches die Informationen, welche Tabellen und welche Spalten du durchsuchen willst aus dem Datadictionary holt. Probier mal folgendes Statement :

    select * from all_tab_columns where owner ='SCHEMAOWNER'

    Das gibt dir für das Schema SCHEMAOWNER alle Tabellen mit allen Columns und ihren Datentype zurück. Damit musst du dir ein dynamisches SQL aufbauen, welches die entsprechenden Daten sucht.


    Gruss

    Comment


    • #3
      Hallo Ulrich,

      vielen Dank für Deine schnelle Antwort.

      Da ich nicht wusste, welchen Namen ich für SCHEMAOWNER eintragen sollte, habe ich Dein Statement folgendermaßen abgeändert u. gestartet:
      select * from all_tab_columns where owner LIKE '%'
      Als Ergebniss habe ich eine Tabelle erhalten, die über 37000 Datensätze enthält und 20 unterschiedliche Owner.

      Wie kann ich denn jetzt mein ursprüngliches Problem mit diesen Erkenntnissen lösen?
      Kannst Du mir da weiterhelfen?

      Gruß

      Comment


      • #4
        - Ja, da sind natürlich alle Systembenutzer wie sys, system etc auch enthalten. Aber deine Applikation auf der DB wird ja (hoffentlich) einen eigenen Benutzer haben. Wie logst du dich in die DB ein ? Dieser Benuzter wird (wahrscheinlich) der Owner der Objekte sein, ausser er ist ein Proxy-User. Das musst du schon vorher abklären


        Gruss

        Comment


        • #5
          Richtig. Sys, system u.s.w. sind auch dabei. Es gibt aber auch den Owner, der uns die Datenbank aufgebaut hat. Und unter diesem Owner sind auch die Tabellen, in denen ich die zu suchenden Daten vermute.
          Ich logge mich als Administrator in der DB an u. habe somit alle Rechte.

          Gruß

          Comment


          • #6
            export

            Hallo HPeters,

            oder, wenn die DB nicht gerade 100GB hat dann sehe ich mit einem klassischen export noch eine alternative. Ist zwar manuell, sollte aber auch funktionieren.

            --> der export erzeugt ein File in dem alle Statements zum erzeugen der Daten drinnen stehen --> d.h die Daten stehen auch im Klartext drinnen --> Suchen mit einen Editor (welcher mit großen Files umgehen kann(vi?)) nach den Daten und dann zurück bis zum vorigen create table --> und dann solltest Du die Tabelle haben.

            Ansonsten wie Ulrich vorgeschlagen hat.

            select 'select * from ' || table_name || ' where ' || COLUMN_NAME || ' like %meintext%;' from all_tab_columns where data_type like '%VARCHAR2'
            and owner not in ('SYS','SYSTEM');

            --> dann bekommst Du viele select Statements welche Du fahren mußt. Es werden hier nur (N)Varchar2 Spalten durchsucht. Werden die Daten in LOB's gespeichert, dann wirds ein wenig komplizierter.

            viel Glück!

            ps. bei diesem Statement werde sicher zu viele Spalten angezeigt --> also das where verbessern, ansonsten mußt Du echt die komplette DB lesen!

            Comment

            Working...
            X