ORA-01157: cannot identify/lock data file 1 - see DBWR trace file

Oracle 11gR2

SQL> alter database open;
ERROR at line 1:
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1:
'/home/oracle/u01/app/oracle/oradata/IAT11F/system01.dbf'


In fase di start di un db il control file contiene indicazione a datafile presenti in un altro path.
'/home/oracle/u01/app/oracle/oradata/IAT11F/system01.dbf'
I datafile sono invece presente nel seguente path
/u01/app/oracle/oradata/IAT11F/

Una soluzione è modificare il control file.
La seguente istruzione crea un backup del control file in sql che può essere modificato a mano.

SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

Database altered.

Visualizzare l' Alert log  per individuare il nome e la location del trace file.

Nel file alert_<SID>.log troviamo questo

ALTER DATABASE BACKUP CONTROLFILE TO TRACE
Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/iat11f/IAT11F/trace/IAT11F_ora_2425.trc
Completed: ALTER DATABASE BACKUP CONTROLFILE TO TRACE

Modificare il file facendolo puntare al nuovo path che contiene i datafile e rinominarlo come file  control01.sql

vi IAT11F_ora_2425.trc
......
...
DATAFILE
  '/home/oracle/u01/app/oracle/oradata/SIAT11F/system01.dbf',
.........


Diventa così:

CREATE CONTROLFILE REUSE DATABASE "SIAT11F" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/IAT11F/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/u01/app/oracle/oradata/IAT11F/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/u01/app/oracle/oradata/IAT11F/redo03.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oracle/oradata/IAT11F/system01.dbf',
'/u01/app/oracle/oradata/IAT11F/sysaux01.dbf',
..............................
'/u01/app/oracle/oradata/SIAT11F/ts_pluto_data02.dbf'
CHARACTER SET WE8ISO8859P1;


Conservare gli script di creazione dei file temp da usare dopo lo start del db.

ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/SIAT11F/temp01.dbf'

Spegnere il db e fare una copia dei vecchi controlfile

SQL> shutdown immediate;

[oracle@coslab02 IAT11F]$ cp control01.ctl control02.ctl

Dopodiché riavviare il db

SQL>startup nomount;
SQL>@/<path>/control01.sql
SQL>  select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/SIAT11F/control01.ctl

SQL> select status from v$instance;

STATUS
------------
MOUNTED


SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u01/app/oracle/oradata/SIAT11F/system01.dbf'

SQL> recover database
Media recovery complete.
SQL> alter database open;
Database altered.


Scambia i file di log tre (3) volte per assicurarti che il database funzioni correttamente. Assicurati di controllare il registro degli allarmi.

SQL> alter system switch logfile;

Creare il datafile temp

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/SIAT11F/temp01.dbf'
SIZE 73M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED;



Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database