Friday, September 5, 2014

Oracle DB - Error ORA-01110 pri eksportu podataka


Prilikom izvršenja procedure eksporta podataka jedne schema-e iz Oracle baze podataka dobio sam grešku:


Očigledno da nešto nije bilo uredu sa datafajlom C:\ORACLE\ORADATA\ORA11G\SYSAUX01.DBF koji pripada tablespace-u SYSAUX. Provjerom alert.log fajla ustanovio sam da stvarno postoji problem sa navedenim datafajlom. Greške u alert.log fajlu su bile oblika:

ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 2 cannot be read at this time
ORA-01110: data file 2: 'C:\ORACLE\ORADATA\ORA11G\SYSAUX01.DBF'

Dakle, potrebno je uraditi media recovery navedenog datafajla.

Postupak je sledeći:

1. Provjeriti trenutno stanje Oracle baze podataka:

SQL> select name, open_mode, checkpoint_change#, ARCHIVE_CHANGE# from v$database;

NAME      OPEN_MODE            CHECKPOINT_CHANGE# ARCHIVE_CHANGE#
--------- -------------------- ------------------ ---------------
ORA11G    READ WRITE                    138707138       138707134


2. Provjeriti u kakvom je stanju datafajl nad kojim je potrebno odraditi media recovery proceduru:

SQL> select * from v$recover_file;

FILE#   ONLINE    ONLINE_ERROR               CHANGE#    TIME
---------- -------         --------------------------           --------            -----
         2  OFFLINE   OFFLINE                             138029207    12.08.14


3. Provjeriti stanje svih datafajlova u bazi:

SQL> select substr(name,1,50), recover, fuzzy, checkpoint_change# from v$datafil
e_header;

SUBSTR(NAME,1,50)                                                    REC   FUZ CHECKPOINT_CHANGE#
--------------------------------------------------                       ---      ---     ------------------
C:\ORACLE\ORADATA\ORA11G\SYSTEM01.DBF   NO  YES          138707176
C:\ORACLE\ORADATA\ORA11G\SYSAUX01.DBF   YES YES          138029207
C:\ORACLE\ORADATA\ORA11G\UNDOTBS01.DBF  NO  YES          138707176
C:\ORACLE\ORADATA\ORA11G\USERS01.DBF      NO  YES          138707176
C:\ORACLE\ORADATA\ORA11G\IDC_SYSTEM.DBF    NO  YES          138707176


4. Provjeriti koji nam je archive log potreban da bi smo uradili recovery navedenog datafajla:

SQL> select * from v$recovery_log;

   THREAD#  SEQUENCE# TIME     ARCHIVE_NAME
---------- ---------- -------- -------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------------------------------------
         1       1225 12.08.14 C:\ORACLE\FLASH_RECOVERY_AREA\ORA11G\ARCHIVELOG\2
014_08_13\O1_MF_1_1225_9YP26W7Q_.ARC

Utvrditi da li je navedeni archive log fajl dostupan. Ako jeste može se nastaviti sa procedurom recovery-a.


5. Restartovati bazu u MOUNT modu i izvršiti komandu:

SQL> recover datafile 2;


6. Provjeriti da li je potrebno uraditi recovery još nekog datafajla:

SQL> select * from v$recover_file;

no rows selected

7. Ako nije potrebno uraditi recovery drugog datafajla baza se može otvoriti za rad u READ WRITE modu. Ali prvo je potrebno vratiti datafajl SYSAUX01.DBF u ONLINE status:

SQL> alter database datafile 2 online;

8. I na kraju otvoriti bazu za pristup svim korisnicima:

SQL> alter database open;

Database altered.


Sada je moguće izvršiti eksport podataka bez problema.