Oracle: Unterschied zwischen den Versionen
Aus MeinWiki
								
												
				K  | 
				 (→ORDS Debugging aktivieren)  | 
				||
| (30 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| + | *[[Installationsanleitung Linux/Oracle]]  | ||
| + | *[[Version12]]  | ||
| + | *[[Procedure/Function]]  | ||
| + | *[[Fehlermeldung]]  | ||
| + | == Berechtigung verwalten ==  | ||
| + | *User Berechtigung auf ein Objekt erteilen. (All, Select, Insert, Update, Delete, Alter, Referenz, Index)  | ||
| + |     grant "Privileges" on "object" to "user";  | ||
| + |     grant "Privileges", "Privileges",  on "object" to "user";  | ||
| + | *User Berechtigung von ein Objekt entfernen. (All, Select, Insert, Update, Delete, Alter, Referenz, Index)  | ||
| + |     revoke "Privileges" on "object" from "user";  | ||
| + | *User zu Gruppe hinzufügen  | ||
| + |     grant "Role" to "user";  | ||
| + |     grant "Role", "Role" to "user";  | ||
| + | *User von einer Gruppe entfernen  | ||
| + |     revoke "Role" from "user";  | ||
| + | *User Berechtigung zum Ausführen von Funktionen/Prozeduren erteilen  | ||
| + |     grant execute on "object" to "user";  | ||
| + | *User Berechtigung zum Ausführen von Funktionen/Prozeduren erteilen  | ||
| + |     revoke execute on "object" from "user";  | ||
| + | *Passwortablauf der Benutzer über Profile deaktiveren. Wenn nötig das "DEFAULT"-Profile clonen.  | ||
| + |    alter profile "DEFAULT" limit PASSWORD_REUSE_TIME UNLIMITED;  | ||
| + |    alter profile "DEFAULT" limit PASSWORD_LIFE_TIME UNLIMITED;  | ||
| + |    -- Abfragen --  | ||
| + |    select username, account_status, expiry_date from dba_user;  | ||
| + |    select * drom dba_profiles order by profile, resource_name;  | ||
| + | |||
== Tablespace erweitern ==  | == Tablespace erweitern ==  | ||
| − | *um ein File  | + | *um ein File.  | 
     ALTER TABLESPACE "Tablespace"    |      ALTER TABLESPACE "Tablespace"    | ||
     ADD    |      ADD    | ||
| Zeile 7: | Zeile 33: | ||
     ON NEXT  100M MAXSIZE  2048M;  |      ON NEXT  100M MAXSIZE  2048M;  | ||
| − | *um mehrere Files  | + | *um mehrere Files.  | 
     ALTER TABLESPACE "Tablespace"    |      ALTER TABLESPACE "Tablespace"    | ||
     ADD    |      ADD    | ||
| Zeile 15: | Zeile 41: | ||
     ON NEXT  100M MAXSIZE  2048M, '/opt/oracle/oradata/"SID"/"Tablespace"..dbf' SIZE 100M AUTOEXTEND    |      ON NEXT  100M MAXSIZE  2048M, '/opt/oracle/oradata/"SID"/"Tablespace"..dbf' SIZE 100M AUTOEXTEND    | ||
     ON NEXT  100M MAXSIZE  2048M;  |      ON NEXT  100M MAXSIZE  2048M;  | ||
| + | *Autoextend erweitern.  | ||
| + |     ALTER DATABASE DATAFILE '/opt/oracle/oradata/"SID"/"Tablespace".dbf' AUTOEXTEND ON MAXSIZE  768M  | ||
| + | |||
| + | == Hilfreiche Befehle ==  | ||
| + | === Feldlänge ===  | ||
| + | *Feldlänge die größer ist als abfragen.  | ||
| + |     select substr("Column",0,255)  from "Table" where length(Column)> 255;  | ||
| + | *Feldlänge ändern, die größer ist als sind. Daten werden abgeschnitten.  | ||
| + |     update "Table" set "Column" = substr("Column",0,255) where length("Column")> 255;  | ||
| + | |||
| + | == Move Datefile ==  | ||
| + | === Online ===  | ||
| + | * In der Enterprise Version ab Version 12.1 besteht die Möglichkeit online Datafiles zu verschieben.  | ||
| + |  select file_id, file_name FROM dba_data_files  | ||
| + |  alter database move datafile "file_id oder file_name' to 'new_file_name'  | ||
| + | === Offline ===  | ||
| + |  select t.file_id, t.tablespace_name, t.file_name  from dba_data_files t  | ||
| + |  shutdown immediate;  | ||
| + |  host mv file_name new_file_name  | ||
| + |  alter database rename file 'file_name' to 'new_file_name';  | ||
| + |  alter database open;  | ||
| + | |||
| + | == Oracle Dump Export/ Import ==  | ||
| + | === Export / Import old ===  | ||
| + | *Export mit Parameterfile  | ||
| + | Parameterfile:  | ||
| + |  FILE='/path/dump.dmp'  | ||
| + |  LOG='/path/log.log'   | ||
| + |  STATISTICS=none   | ||
| + |  OWNER=(DBUSER1,DBUSER2)  | ||
| + | Befehl:  | ||
| + |  exp \'/ as sysdba\' PARFILE=/path/parameterfile.dat  | ||
| + | === Oracledump ===  | ||
| + | *Dump Directory für Import oder Export erstellen  | ||
| + |     CREATE DIRECTORY dmpdir-name AS 'Verzeichnis';  | ||
| + | *Export-Dump.  | ||
| + |     expdp \'/ as sysdba\' dumpfile=file.dmp logfile=file.log schemas=SCHEMA-NAME directory=dmpdir-name version=10.2.0  | ||
| + | *Import-Dump.  | ||
| + |     impdp \'/ as sysdba\' dumpfile=file.dmp logfile=file.log schemas=SCHEMA-NAME directory=dmpdir-name  | ||
| + | ====Fehlermeldung====  | ||
| + | *ORA-39346: Datenverlust bei Zeichensatzkonvertierung für Objekt SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS  | ||
| + |  Export mit dem Parameter exclude=statistics ausführen.  | ||
| + | |||
| + | == Archivelog Änderungen anzeigen. ==  | ||
| + |    select t.sid, s.name, t.value, r.username, r.program, r.type, r.module  | ||
| + |    from v$sesstat t   | ||
| + |        join v$statname s on s.statistic# = t.statistic#  | ||
| + |        join v$session r on r.sid = t.sid  | ||
| + |    where name like '%redo entries%'  | ||
| + |    order by t.value desc;  | ||
| + | == Patchmanagment ==  | ||
| + | === OPatch aktualisieren ===  | ||
| + | Bevor neue Patches in die Oracleinstallation eingespielt werden könnne, muss das Patchtool "OPatch" auf den neusten Stand aktualisiert werden.  | ||
| + | *Parameter ORACLE_HOME überprüfen.  | ||
| + | *Inventory anzeigen (OPatchversion).  | ||
| + |     $ORACLE_HOME/OPatch/opatch version  | ||
| + |     $ORACLE_HOME/OPatch/opatch lsinventory  | ||
| + | *Patch entpacken. (muss nicht innerhalb der Oracleinstallation sein)  | ||
| + | *Verzeichnis $ORACLE_HOME/OPatch löschen.  | ||
| + | *Patch in das Verzeichnis kopieren(Berechtigung beachten).  | ||
| + | *Inventory anzeigen (OPatchversion).  | ||
| + | |||
| + | === Patch einspielen ===  | ||
| + | *Patch entpacken.  | ||
| + | *In das entpackte Verzeichnis wechseln.  | ||
| + | *Anforderung der Patchinstallation überprüfen.  | ||
| + |     $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./  | ||
| + | *Datenbank und Listner stoppen.  | ||
| + | *Patch einspielen.  | ||
| + |     $ORACLE_HOME/OPatch/opatch apply  | ||
| + | *Installierte Patches anzeigen  | ||
| + | *Datenbank starten.  | ||
| + | *Scripte der Preinstallation ausführen (Readme-Datei).  | ||
| + | == Archivelog analysieren ==  | ||
| + | * File laden  | ||
| + |  begin  | ||
| + |  sys.dbms_logmnr.add_logfile (logfilename => 'File-Path',options=>sys.dbms_logmnr.new);  | ||
| + |  sys.DBMS_LOGMNR.START_LOGMNR(options => sys.dbms_logmnr.DICT_FROM_ONLINE_CATALOG);  | ||
| + |  end;  | ||
| + |  /  | ||
| + | *Inhalt anzeigen.  | ||
| + |  select * from V$LOGMNR_CONTENTS where rownum < 1000;  | ||
| + | |||
| + |  column SQL_REDO format a80;  | ||
| + |  column SQL_UNDO format a80;  | ||
| + |  select SQL_REDO , SQL_UNDO from V$LOGMNR_CONTENTS where rownum < 1000;  | ||
| + | *File entladen!!!!  | ||
| + |  begin  | ||
| + |  sys.dbms_logmnr.end_logmnr;  | ||
| + |  end;   | ||
| + |  /  | ||
| + | |||
| + | == ODAC ==  | ||
| + | *Installation lt. Anleitung.  | ||
| + | *Umgebungsvariable PAth anpassen.  | ||
| + | *TNS-Names erstellen.  | ||
| + | *Umgebungsvariable TNS_ADMIN erstellen.  | ||
| + | |||
| + | == APEX ==  | ||
| + | === Fehler ===  | ||
| + | ==== Verbindung ORDS REST fehlerhaft ====  | ||
| + | *  The connection pool named: ords_rt is not correctly configured, due to the following error(s): ORA-28000: Account ist gesperrt  | ||
| + | Datenbank User APEX_REST_PUBLIC_USER entsprerren.  | ||
| + |     ALTER USER APEX_REST_PUBLIC_USER IDENTIFIED BY "Passwort" ACCOUNT UNLOCK;  | ||
| + | Verbindungseinstellung der ORDS Konfiguration überprüfen.  | ||
| + |      /u01/ords/conf/ords/conf/ords_rt.xml  | ||
| + | Ggf. Passwort Parameter in der Konfiguration neu setzen. Unverschlüsselt mit !. Tomcat neu starten.  | ||
| + |     <entry key="db.password">!newpassword</entry>  | ||
| + | |||
| + | ==== ORDS Debugging aktivieren====  | ||
| + | Im Parameterfile folgende Einträge hinzufügen.  | ||
| + |   <entry key="debug.debugger">true</entry>  | ||
| + |   <entry key="debug.printDebugToScreen">true</entry>  | ||
| + |   <entry key="log.logging">true</entry>  | ||
| + |   <entry key="log.maxEntries">600</entry>  | ||
Aktuelle Version vom 6. November 2020, 17:53 Uhr
Inhaltsverzeichnis
Berechtigung verwalten
- User Berechtigung auf ein Objekt erteilen. (All, Select, Insert, Update, Delete, Alter, Referenz, Index)
 
grant "Privileges" on "object" to "user"; grant "Privileges", "Privileges", on "object" to "user";
- User Berechtigung von ein Objekt entfernen. (All, Select, Insert, Update, Delete, Alter, Referenz, Index)
 
revoke "Privileges" on "object" from "user";
- User zu Gruppe hinzufügen
 
grant "Role" to "user"; grant "Role", "Role" to "user";
- User von einer Gruppe entfernen
 
revoke "Role" from "user";
- User Berechtigung zum Ausführen von Funktionen/Prozeduren erteilen
 
grant execute on "object" to "user";
- User Berechtigung zum Ausführen von Funktionen/Prozeduren erteilen
 
revoke execute on "object" from "user";
- Passwortablauf der Benutzer über Profile deaktiveren. Wenn nötig das "DEFAULT"-Profile clonen.
 
alter profile "DEFAULT" limit PASSWORD_REUSE_TIME UNLIMITED; alter profile "DEFAULT" limit PASSWORD_LIFE_TIME UNLIMITED; -- Abfragen -- select username, account_status, expiry_date from dba_user; select * drom dba_profiles order by profile, resource_name;
Tablespace erweitern
- um ein File.
 
ALTER TABLESPACE "Tablespace" ADD DATAFILE '/opt/oracle/oradata/"SID"/"Tablespace".dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 2048M;
- um mehrere Files.
 
ALTER TABLESPACE "Tablespace" ADD DATAFILE '/opt/oracle/oradata/"SID"/"Tablespace".dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 2048M, '/opt/oracle/oradata/"SID"/"Tablespace"..dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 2048M, '/opt/oracle/oradata/"SID"/"Tablespace"..dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 2048M;
- Autoextend erweitern.
 
ALTER DATABASE DATAFILE '/opt/oracle/oradata/"SID"/"Tablespace".dbf' AUTOEXTEND ON MAXSIZE 768M
Hilfreiche Befehle
Feldlänge
- Feldlänge die größer ist als abfragen.
 
   select substr("Column",0,255)  from "Table" where length(Column)> 255;
- Feldlänge ändern, die größer ist als sind. Daten werden abgeschnitten.
 
   update "Table" set "Column" = substr("Column",0,255) where length("Column")> 255;
Move Datefile
Online
- In der Enterprise Version ab Version 12.1 besteht die Möglichkeit online Datafiles zu verschieben.
 
select file_id, file_name FROM dba_data_files alter database move datafile "file_id oder file_name' to 'new_file_name'
Offline
select t.file_id, t.tablespace_name, t.file_name from dba_data_files t shutdown immediate; host mv file_name new_file_name alter database rename file 'file_name' to 'new_file_name'; alter database open;
Oracle Dump Export/ Import
Export / Import old
- Export mit Parameterfile
 
Parameterfile:
FILE='/path/dump.dmp' LOG='/path/log.log' STATISTICS=none OWNER=(DBUSER1,DBUSER2)
Befehl:
exp \'/ as sysdba\' PARFILE=/path/parameterfile.dat
Oracledump
- Dump Directory für Import oder Export erstellen
 
CREATE DIRECTORY dmpdir-name AS 'Verzeichnis';
- Export-Dump.
 
expdp \'/ as sysdba\' dumpfile=file.dmp logfile=file.log schemas=SCHEMA-NAME directory=dmpdir-name version=10.2.0
- Import-Dump.
 
impdp \'/ as sysdba\' dumpfile=file.dmp logfile=file.log schemas=SCHEMA-NAME directory=dmpdir-name
Fehlermeldung
- ORA-39346: Datenverlust bei Zeichensatzkonvertierung für Objekt SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
 
Export mit dem Parameter exclude=statistics ausführen.
Archivelog Änderungen anzeigen.
  select t.sid, s.name, t.value, r.username, r.program, r.type, r.module
  from v$sesstat t 
      join v$statname s on s.statistic# = t.statistic#
      join v$session r on r.sid = t.sid
  where name like '%redo entries%'
  order by t.value desc;
Patchmanagment
OPatch aktualisieren
Bevor neue Patches in die Oracleinstallation eingespielt werden könnne, muss das Patchtool "OPatch" auf den neusten Stand aktualisiert werden.
- Parameter ORACLE_HOME überprüfen.
 - Inventory anzeigen (OPatchversion).
 
$ORACLE_HOME/OPatch/opatch version $ORACLE_HOME/OPatch/opatch lsinventory
- Patch entpacken. (muss nicht innerhalb der Oracleinstallation sein)
 - Verzeichnis $ORACLE_HOME/OPatch löschen.
 - Patch in das Verzeichnis kopieren(Berechtigung beachten).
 - Inventory anzeigen (OPatchversion).
 
Patch einspielen
- Patch entpacken.
 - In das entpackte Verzeichnis wechseln.
 - Anforderung der Patchinstallation überprüfen.
 
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
- Datenbank und Listner stoppen.
 - Patch einspielen.
 
$ORACLE_HOME/OPatch/opatch apply
- Installierte Patches anzeigen
 - Datenbank starten.
 - Scripte der Preinstallation ausführen (Readme-Datei).
 
Archivelog analysieren
- File laden
 
begin sys.dbms_logmnr.add_logfile (logfilename => 'File-Path',options=>sys.dbms_logmnr.new); sys.DBMS_LOGMNR.START_LOGMNR(options => sys.dbms_logmnr.DICT_FROM_ONLINE_CATALOG); end; /
- Inhalt anzeigen.
 
select * from V$LOGMNR_CONTENTS where rownum < 1000; column SQL_REDO format a80; column SQL_UNDO format a80; select SQL_REDO , SQL_UNDO from V$LOGMNR_CONTENTS where rownum < 1000;
- File entladen!!!!
 
begin sys.dbms_logmnr.end_logmnr; end; /
ODAC
- Installation lt. Anleitung.
 - Umgebungsvariable PAth anpassen.
 - TNS-Names erstellen.
 - Umgebungsvariable TNS_ADMIN erstellen.
 
APEX
Fehler
Verbindung ORDS REST fehlerhaft
- The connection pool named: ords_rt is not correctly configured, due to the following error(s): ORA-28000: Account ist gesperrt
 
Datenbank User APEX_REST_PUBLIC_USER entsprerren.
ALTER USER APEX_REST_PUBLIC_USER IDENTIFIED BY "Passwort" ACCOUNT UNLOCK;
Verbindungseinstellung der ORDS Konfiguration überprüfen.
/u01/ords/conf/ords/conf/ords_rt.xml
Ggf. Passwort Parameter in der Konfiguration neu setzen. Unverschlüsselt mit !. Tomcat neu starten.
<entry key="db.password">!newpassword</entry>
ORDS Debugging aktivieren
Im Parameterfile folgende Einträge hinzufügen.
<entry key="debug.debugger">true</entry> <entry key="debug.printDebugToScreen">true</entry> <entry key="log.logging">true</entry> <entry key="log.maxEntries">600</entry>