Zurück

Export / Import einer Gesamt-Datenbank

Bei einem Gesamt-Datenbank Export werden sämtliche Objekte ausser diejenigen des User SYS exportiert. Insbesondere werden auch PUBLIC Synonyme exportiert. Soll also eine Datenbank auf einem anderen Host reinstalliert werden, so kann dies auf relativ einfache Art und Weise über einen Full Export / Full Import gemacht werden. Zuerst wird die DB exportiert, dann wird die neue DB erstellt und die SYS SQL-Scripts in $ORACLE_HOME/rdbms/admin ausgeführt, damit die SYS Objekte wieder vorhanden sind. Zum Schluss wird die DB importiert. Fehlermeldungen betreffend existierenden Objekten können ignoriert werden. Existieren die physischen Datenbankfiles am neuen Ort bereits, so muss die Option DESTROY=Y beim Import angegeben werden. Auf keinen Fall sollte IGNORE=Y beim Import angegeben werden, denn damit könnten doppelte Rows eingefügt werden sofern kein Primary Key dies verhindert.

  • INIT.ORA editieren

log_archive_start = false           #  Kein Online Backup
#  rollback_segments = (sys_rb2)    # Alle RS auskommentieren

  • Export durchführen

exp80 userid=system/manager full=y log=exp.log file=full.dmp

  • DB neu anlegen inkl zusätzlichem RS-Segment und SYS Objekten

SPOOL D:\Orant\Database\initARK1.log

CONNECT sys/manager AS SYSDBA;

REM *************************************************************
REM *                                                            *
REM * Startup database                                           *
REM *                                                            *
REM *************************************************************

STARTUP NOMOUNT pfile=D:\Orant\Database\initARK1_init.ora

REM *************************************************************
REM *                                                            *
REM * Create database.                                           *
REM *                                                            *
REM *************************************************************

CREATE DATABASE ARK1
CONTROLFILE REUSE
MAXDATAFILES 256
MAXINSTANCES 4
MAXLOGFILES 62
MAXLOGMEMBERS 5
MAXLOGHISTORY 1600
CHARACTER SET "WE8ISO8859P1"
    NATIONAL CHARACTER SET "WE8ISO8859P1"
DATAFILE 'E:\Oradata\ARK1\sys\ARK1_sys1.dbf' SIZE 150M REUSE
AUTOEXTEND ON NEXT 20M MAXSIZE UNLIMITED
LOGFILE GROUP 1 ('E:\Oradata\ARK1\rdo\ARK1_log1A.rdo',
                 'E:\Oradata\ARK1\rdo\ARK1_log1B.rdo') SIZE 4M REUSE,
        GROUP 2 ('E:\Oradata\ARK1\rdo\ARK1_log2A.rdo',
                 'E:\Oradata\ARK1\rdo\ARK1_log2B.rdo') SIZE 4M REUSE;

CREATE ROLLBACK SEGMENT sys_rb2
TABLESPACE SYSTEM
STORAGE
(
INITIAL 4M
NEXT 4M
MINEXTENTS 2
MAXEXTENTS 100
);

ALTER ROLLBACK SEGMENT sys_rb2 ONLINE;

REM *************************************************************
REM *                                                            *
REM * Set security for the administrative users.                 *
REM *                                                            *
REM *************************************************************

ALTER USER system
IDENTIFIED BY manager;

ALTER USER sys
IDENTIFIED BY manager;

REM *************************************************************
REM *                                                            *
REM * Load the system scripts.                                   *
REM *                                                            *
REM *************************************************************

SET STOPONERROR OFF;
SET TERMOUT ON;

@D:\ORANT\RDBMS80\admin\catalog.sql
@D:\ORANT\RDBMS80\admin\catparr.sql
@D:\ORANT\RDBMS80\admin\catproc.sql
@D:\ORANT\RDBMS80\admin\catrep.sql
@D:\ORANT\RDBMS80\admin\catio.sql
@D:\ORANT\RDBMS80\admin\dbmsiotc.sql
@D:\ORANT\RDBMS80\admin\prvtiotc.plb
@D:\ORANT\RDBMS80\admin\dbmspool.sql
@D:\ORANT\RDBMS80\admin\utlchain.sql
@D:\ORANT\RDBMS80\admin\utlexcpt.sql
@D:\ORANT\RDBMS80\admin\utltkprf.sql
@D:\ORANT\RDBMS80\admin\utlxplan.sql
@D:\ORANT\RDBMS80\admin\catperf.sql
@D:\ORANT\RDBMS80\admin\catexp7.sql
@D:\ORANT\RDBMS80\admin\catblock.sql
@D:\ORANT\RDBMS80\admin\utllockt.sql
@D:\ORANT\RDBMS80\admin\dbmspipe.sql
@D:\ORANT\RDBMS80\admin\dbmsalrt.sql
@D:\ORANT\RDBMS80\admin\utlvalid.sql
@D:\ORANT\RDBMS80\admin\utlraw.sql
@D:\ORANT\RDBMS80\admin\prvtrawb.plb
@D:\ORANT\RDBMS80\admin\dbmsoctk.sql
@D:\ORANT\RDBMS80\admin\prvtoctk.plb
@D:\ORANT\RDBMS80\admin\dbmsrand.sql

SPOOL OFF;
EXIT;

  • Full Import durchführen (DESTROY=Y, bestehende DB-Files überschreiben)

imp80 userid=system/manager log=imp.log file=full.dmp full=y destroy=y commit=y

Fehlermeldungen IMP-00015: following statement failed because the object already exists: ignorieren. Das Logfile auf ORA Fehler untersuchen mit grep "ORA-* imp.log.

  • Temporäres Rollback Segment auf Offline stellen

ALTER ROLLBACK SEGMENT sys_rb2 OFFLINE;

  • SYS Grants neu vergeben, diese wurden ja nicht exportiert / importiert

svrmgrl;
CONNECT sys/manager AS SYSDBA;

GRANT EXECUTE ON sys.dbms_pipe TO <dbuser>;
GRANT EXECUTE ON sys.dbms_alert TO <dbuser>;
GRANT EXECUTE ON sys.dbms_standard TO <dbuser>;
GRANT EXECUTE ON sys.dbms_transaction TO <dbuser>;
GRANT EXECUTE ON sys.dbms_utility TO <dbuser>;
GRANT EXECUTE ON sys.dbms_lock TO <dbuser>;
GRANT EXECUTE ON sys.dbms_sql TO <dbuser>;

### Grant Privileges for SET AUTOTRACE in SQL*PLUS
### ----------------------------------------------

GRANT DELETE,INSERT,UPDATE,SELECT ON sys.plan_table TO <dbrole>;
GRANT SELECT ON V_$PARAMETER TO <dbrole>;

@D:\ORANT\PLUS80\plustrce.sql
GRANT plustrace to <dbrole>;

  • Alle INVALID Objekte recompilieren

set heading off;
set feed off;
set pagesize 10000;
set wrap off;
set linesize 200;
set tab on;
set scan off;
set verify off;
--
spool comp_all.tmp

select decode (OBJECT_TYPE, 'PACKAGE BODY',
  'alter package ' || OWNER ||'.'||OBJECT_NAME || ' compile body;',
  'alter ' || OBJECT_TYPE || ' ' || OWNER||'.'|| OBJECT_NAME ||
  ' compile;'
)
   from DBA_OBJECTS A,
        SYS.ORDER_OBJECT_BY_DEPENDENCY B
  where A.OBJECT_ID = B.OBJECT_ID (+)
    and A.STATUS = 'INVALID'
    and A.OBJECT_TYPE in ('PACKAGE
    BODY','PACKAGE','FUNCTION','PROCEDURE','TRIGGER','VIEW')
order by B.DLEVEL desc,
        A.OBJECT_TYPE,
        A.OBJECT_NAME;
--
spool off;
set heading on;
set feed on;
set scan on;
set verify on;
--
@comp_all.tmp

  • INIT.ORA editieren

rollback_segments = (RBS01,RBS02,RBS03,RBS04,RBS05,RBS06)
log_archive_start = false          #   Kein Online Backup

  • DB Shutdown / Startup

svrmgrl
connect internal
shutdown immediate
startup