DBA

Partitionierte Tabellen


http://oracledoug.com/serendipity/index.php?/archives/1562-Statistics-on-Partitioned-Tables-Part-1.html
 
================================================================ 

PL/SQL Code durchsuchen

------------------------------------------------------------------------------------------------------------------ 
--
-- http://stackoverflow.com/questions/251902/is-there-a-way-to-do-full-text-search-of-all-oracle-packages-and-procedures?rq=1
--
SELECT name, line, text
  FROM dba_source
 WHERE upper(text) like upper('%put_line%') escape '\'
 ;
--
-- http://stackoverflow.com/questions/26883447/how-to-check-where-in-some-other-package-procedure-my-procedureinside-a-package?rq=1
--
select /*+  parallel(als, 16) */
       *
  from all_source als
 where type in ('PROCEDURE', 'PACKAGE BODY')
   and name in (select NAME
                  from all_Dependencies
                 where referenced_name = 'OE_HEADER_UTIL')
   and upper(text) like '%INSERT_ROW%'
   ;

--
--
--
select name,
       type,
       decode(usage,'DECLARATION', 'body only', 'DEFINITION', 'spec and body', usage) defined_on,
       line body_line
  from user_identifiers ui
  where type in ('PROCEDURE', 'FUNCTION')
  and usage_context_id = (select usage_id
    from user_identifiers
      where object_name = ui.object_name
        and object_type = ui.object_type
        and usage_context_id = 0)
  and object_name = 'EMP_TAPI'
  and object_type = 'PACKAGE BODY'
  order by name
  ;

 

================================================================ 

Index-organisierte Tabellen (IOT)

------------------------------------------------------------------------------------------------------------------ 
http://use-the-index-luke.com/de/sql/clustering/index-organized-clustered-index 
https://books.google.de/books?id=u7_YgJVODGcC&printsec=frontcover&hl=de#v=onepage&q&f=false

================================================================ 

Insert mit Sequence 

------------------------------------------------------------------------------------------------------------------ 
INSERT INTO ct_dept3
  (
    DEPTNO,
    AENDERUNGSZEITSTEMPEL,
    AENDERUNGS_KENNZEICHEN
  )
VALUES
  (
    SEQ_AENDNR_CT_DEPT.NEXTVAL,
    sysdate,
    'I'
  );

 
================================================================ 

User Objects überprüfen 

 ------------------------------------------------------------------------------------------------------------------ 
SELECT table_name
  FROM USER_CONSTRAINTS
 WHERE status <> 'ENABLED'
ORDER BY table_name;
--
EXEC pkg_adm_migration.s_recompile;
--
SELECT *
  FROM user_objects
 WHERE 1 = 1
   AND status <> 'VALID';
--
BEGIN
  FOR v_cur IN (
      SELECT owner,
             constraint_name ,
             table_name
        FROM all_constraints
       WHERE owner     = 'DBADM'
         AND TABLE_NAME IN (
             SELECT table_name
               FROM USER_CONSTRAINTS
              WHERE status <> 'ENABLED' ))
  LOOP
    EXECUTE immediate 'ALTER TABLE '||v_cur.owner||'.'||v_cur.table_name||' MODIFY CONSTRAINT "'||v_cur.constraint_name||'" ENABLE ';
  END LOOP;
END;
--

--
--
BEGIN
  FOR v_cur IN (
      SELECT owner,
             index_name
        FROM dba_indexes t
       WHERE 1 = 1
         AND t.owner     = 'DBADM'
         AND status = 'UNUSABLE' )
  LOOP
    EXECUTE immediate 'ALTER INDEX '||v_cur.owner||'.'||v_cur.index_name||' REBUILD ';
--    dbms_output.put_line('EXECUTE immediate ALTER INDEX '||v_cur.owner||'.'||v_cur.index_name||' REBUILD ');
  END LOOP;

--
--
--
SELECT 'alter index '
  ||index_owner
  ||'.'
  ||index_name
  ||' rebuild partition '
  ||partition_name
  ||';'
FROM dba_ind_partitions
WHERE status != 'USABLE';
--
SELECT 'alter index '
  ||index_owner
  ||'.'
  ||index_name
  ||'  rebuild subpartition '
  ||subpartition_name
  ||';'
FROM dba_ind_subpartitions
WHERE status != 'USABLE';


================================================================

Alle Sätze einer Tabelle löschen:

------------------------------------------------------------------------------------------------------------------ 

DELETE FROM emp; 

================================================================

Mehrfache Datensätze und Gruppierungen:

------------------------------------------------------------------------------------------------------------------  


SELECT count(*)
     , nachname
     , vorname
 
FROM emp
GROUP BY nachname, vorname
HAVING
count(*) > 1;


SELECT count(*) as Anzahl
     , job
     , sum(sal)
  FROM emp
GROUP BY job
HAVING count(*) > 1
;

-----------------------
Anzahl Job
2      Tester  
4      CLERK      4150
4      SALESMAN   5600
3      MANAGER    8275
2      ANALYST    6000

-----------------------

================================================================

Tabellen anzeigen:

------------------------------------------------------------------------------------------------------------------  

SELECT table_name
  FROM all_tables
 WHERE owner NOT IN ('SYSTEM'
                   , 'SYS'
                   , 'SYSAUX'
                   , 'ORDSYS'
                   , 'WMSYS'
                   , 'MDSYS'
                   , 'EXFSYS'
                   , 'TSMSYS'
                   , 'XDB'
                   , 'DBSNMP'
                   , 'OUTLN'
                   , 'CTXSYS'
                   , 'APPQOSSYS')
ORDER BY owner
;

================================================================

External Tables administrieren:

------------------------------------------------------------------------------------------------------------------  

SELECT *
  FROM USER_EXTERNAL_TABLES
;
--
SELECT *
  FROM ALL_EXTERNAL_TABLES
;
--
SELECT *
  FROM DBA_EXTERNAL_TABLES
;
--
select *
  from USER_EXTERNAL_LOCATIONS
;
--
SELECT *
  FROM ALL_EXTERNAL_LOCATIONS
;
--
SELECT *
  FROM DBA_EXTERNAL_LOCATIONS
;


================================================================

Shell-Script, das eine SQL-Datei erzeugt und mit dem Oracle-Skript runSQLScript.pl ausführt

------------------------------------------------------------------------------------------------------------------ 
#!/bin/sh
# Login-Parameter setzen …
user=system
passwort=…
# SQL-Datei definieren …
echo "connect $user/$passwort;" > datei.sql
echo "select * from tab;" >> datei.sql
echo "exit;" >> datei.sql
# Oracle Perl-Skript aufrufen und 

# damit die SQL-Datei ausfuehren …
$ORACLE_HOME/perl/bin/perl runSQLScript.pl $ORACLE_HOME \ $ORACLE_SID < datei.sql


================================================================

Dies noch einmal als Shell-Script, das mittels SQL*Plus SQL-Statements 

ausführt

------------------------------------------------------------------------------------------------------------------ 
#!/bin/sh
#
# Shell Script, um SQL*Plus aufzurufen und Statements

# auszufuehren.
#
# Variablen setzen
#
sqlplus /nolog << EOF
connect user/password
select * from tab;
-- oder @script.sql bzw. start script.sql
EOF

================================================================

Anzeige der einem Benutzer zugeordneten Tabellen, der 
zugehörigen Spalten und Kommentare

------------------------------------------------------------------------------------------------------------------ 
SELECT utc.table_name
        , utc.column_name    
        , (SELECT ucc.comments
              FROM user_col_comments ucc
            WHERE ucc.table_name = utc.table_name
                  AND ucc.column_name = utc.column_name) AS Kommentar
   FROM user_tab_cols utc
 WHERE utc.table_name IN (SELECT uo.object_name
                                                 FROM user_objects uo
                                              WHERE object_type = 'TABLE')
ORDER BY utc.table_name


-- Das geht natürlich auch viel einfacher :-)

SELECT ucc.table_name
            , ucc.column_name
            , ucc.comments
  FROM user_col_comments ucc
;


================================================================


Supplemental Logging aktivieren

------------------------------------------------------------------------------------------------------------------ 

ALTER TABLE emp ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;
ALTER TABLE emp ADD SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS;
ALTER TABLE emp ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER TABLE emp ADD SUPPLEMENTAL LOG GROUP LG_EMP 
                                  (emp_id, dept_id, sal) ALWAYS;

================================================================

Public Synonyme für DB-Objekte erzeugen

------------------------------------------------------------------------------------------------------------------ 
Dieses kleine SQL-Script erzeugt eine Datei "synonyme.lst" mit SQL-Befehlen, um für aller User-Objekte Public Synonyme anlegen zu können:

set pagesize 0
set linesize 100
set heading offset echo off
set feedback off
spool c:\temp\synonyme.lst

select 'create public synonym 'object_name ' 
                               for 'object_name ';'
  from user_objects
 where object_type not in ('DATABASE LINK','LOB','PACKAGE')
   and object_name not like 'SYS_%'
   and object_name not like '%JAVA%'
order by object_type, object_name;

spool off

================================================================

Die Nutzung von DBA-Features anzeigen

------------------------------------------------------------------------------------------------------------------ 
ALTER SESSION SET NLS_DATE_FORMAT = 'dd.mm.yyyy hh24:mi';

    SELECT a.name,
           a.detected_usages,
           a.first_usage_date,
           a.last_usage_date
    FROM   dba_feature_usage_statistics a
    WHERE  a.version = (SELECT MAX(b.version)
                         FROM   dba_feature_usage_statistics b
                         WHERE  b.name = a.name)
    ORDER BY a.name;


================================================================

Views anzeigen

------------------------------------------------------------------------------------------------------------------ 
SELECT *
  FROM SYS.all_views
 WHERE owner NOT IN ('SYSTEM'
                   , 'SYS' 
                   , 'SYSAUX'
                   , 'ORDSYS'
                   , 'WMSYS'
                   , 'MDSYS'
                   , 'EXFSYS'
                   , 'TSMSYS'
                   , 'XDB'
                   , 'DBSNMP' 
                   , 'OUTLN') 
ORDER BY owner;

================================================================

Schemata anzeigen

------------------------------------------------------------------------------------------------------------------
SELECT DISTINCT owner
  FROM dba_segments
 WHERE owner IN (
              SELECT username
                FROM dba_users
               WHERE default_tablespace NOT IN (
                                         'SYSTEM'
                                       , 'SYSAUX'))
ORDER BY owner;

SELECT DISTINCT
owner
  FROM dba_segments
 WHERE owner NOT IN ('SYSTEM'
                   , 'SYS' 
                   , 'SYSAUX'
                   , 'ORDSYS'
                   , 'WMSYS'
                   , 'MDSYS'
                   , 'EXFSYS'
                   , 'TSMSYS'
                   , 'XDB'
                   , 'DBSNMP' 
                   , 'OUTLN') 
ORDER BY owner;

================================================================ 

User in eine Oracle-DB importieren 

------------------------------------------------------------------------------------------------------------------ 

Oracle-Connect überprüfen 

SELECT * FROM v$instance;

User droppen

DROP USER user CASCADE;

User anlegen

CREATE USER user IDENTIFIED BY VALUES '123abc0988af56'
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON user_ts
PROFILE DEFAULT;
GRANT CONNECT TO user;
GRANT RESOURCE TO user;
GRANT UNLIMITED TABLESPACE TO user_ts

User-Daten importieren

imp userid=system/password
fromuser=user touser=user
file=EXP_FULL.dmp  
log=20130320_.log 
indexes=y ignore=y grants=y

================================================================

Rekompilierung invalider Schema-Objekte

------------------------------------------------------------------------------------------------------------------ 

Ermitteln der Objekte im Status "INVALID":

-- Spaltenbreite begrenzen
COLUMN object_name FORMAT A40
-- Selektieren
SELECT owner
     , object_type
     , object_name
     , status
  FROM dba_objects
WHERE status = 'INVALID'
ORDER BY owner, object_type, object_name;

SHOW ERRORS

Recompilieren der invaliden Objekte (als SYS):

exec dbms_utility.compile_schema(schema => 'SCOTT', compile_all => false);
-- oder
exec utl_recomp.recomp_serial();
-- oder
SELECT 'EXEC DBMS_DDL.ALTER_COMPILE(''' ||object_type||''', '
                                  ||''''||owner||''', '
                                  ||''''||object_name||''');'
  FROM dba_objects
 WHERE status = 'INVALID'
ORDER BY owner, object_type_ object_name;

Keine Kommentare: