O erro ORA-01111 e ORA-01110 ocorre em ambientes Standby (Data Guard ou Manual Standby) quando é adicionado um datafile no servidor primário e o "caminho" do mesmo não está definido no parametro "db_filename_convert" ou quando o parameter "standby_file_mamagement" estiver definido como manual ao invés de auto.
Abaixo, segue um exemplo do erro que ocorre no cenário supracitado.
Tue Apr 04 09:04:32 2017 Errors in file /orabin01/app/oracle/diag/rdbms/lamimdg1/lamimprd1/trace/cdbprd1_mrp0_31106.trc: ORA-01111: name for data file 20 is unknown - rename to correct file ORA-01110: data file 20: '/orabin01/app/oracle/product/12.1.0.2/dbhome_1/dbs/UNNAMED00020' ORA-01157: cannot identify/lock data file 20 - see DBWR trace file ORA-01111: name for data file 20 is unknown - rename to correct file ORA-01110: data file 20: '/orabin01/app/oracle/product/12.1.0.2/dbhome_1/dbs/UNNAMED00020' Tue Apr 04 09:04:32 2017
O primeiro passo para a correção deste erro é identificar no servidor primário qual o datafile que esta como unammed. No exemplo acima, podemos ver que o erro se refere ao datafile 20. Então este é o datafile que precisams identificar. Estarei mostrando tanto como verificar em ambientes 10/11g e 12c non-cdb quanto para ambientes 12c cdb.
--Para ambientes 10/11g e 12c no CDB, podemos consultar conforme abaixo: SQL> select file_name,file_id from dba_data_files where file_ID=20; FILE_NAME FILE_ID ------------------------------------------------------------ ---------- +DGDATA/LAMIMPRD1/DATAFILE/sqltxadmin_data01.dbf 20 -- Ambientes 12c CBD, podemos usar a consulta abaixo, nos trará a informação de qual pdb pertence o datafile 20 -- Deve ser executada conectado no CDB. SET LINES 210 COLUMN PDB_ID FORMAT 999 COLUMN PDB_NAME FORMAT A15 COLUMN FILE_ID FORMAT 9999 COLUMN TABLESPACE_NAME FORMAT A20 COLUMN FILE_NAME FORMAT A60 SELECT p.PDB_ID, p.PDB_NAME, d.FILE_ID, d.TABLESPACE_NAME, d.FILE_NAME FROM DBA_PDBS p, CDB_DATA_FILES d WHERE p.PDB_ID = d.CON_ID ORDER BY p.PDB_ID; PDB_ID PDB_NAME FILE_ID TABLESPACE_NAME FILE_NAME ------ --------------- ------- -------------------- ------------------------------------------------------------ 3 LAMIMPDB 7 SYSTEM +DGDATA/LAMIMPRD1_system01.dbf 3 LAMIMPDB 8 SYSAUX +DGDATA/LAMIMPRD1_sysaux01.dbf 3 LAMIMPDB 9 USERS +DGDATA/LAMIMPRD1/protheus_users01.dbf 3 LAMIMPDB 20 SQLTXADMIN_DATA +DGDATA/LAMIMPRD1/DATAFILE/sqltxadmin_data01.dbf 4 rows selected. lamimprd1@CDB$ROOT>
Apos identificar o datafile que não foi criado no standby. Vamos cria-lo através do comando abaixo.
--Para ambientes 10/11g e 12c no CDB, basta executar o comando abaixo SQL> alter database create datafile '/orabin01/app/oracle/product/12.1.0.2/dbhome_1/dbs/UNNAMED00020' as '+DGDATA/LAMIMPRD1/DATAFILE/sqltxadmin_data01.dbf' size 100m; Database altered. SQL> -- Ambientes 12c CBD, devemos conectar no respectivo PDB para então executar o comando de criação. SQL> alter session set container=LAMIMPDB; Session altered. SQL> alter database create datafile '/orabin01/app/oracle/product/12.1.0.2/dbhome_1/dbs/UNNAMED00020' as '+DGDATA/LAMIMPRD1/DATAFILE/sqltxadmin_data01.dbf' size 100m; Database altered. SQL>
Realizada a criação do datafile podemos iniciar a atualização do standby que a mesma deverá ser executada com sucesso.
Afim de evitar que o problema se repita, faça a validação do parametro "standby_file_mamagement" se está definido como AUTO. Caso o mesmo esteja definido como AUTO é preciso validar os parametros "db_file_name_convert". É provavel que alggum valor nao esteja definido adequadamente e por isso esteja ocasionando o erro.
A sintaxe do parametro "db_file_name_convert" consiste em DB_FILE_NAME_CONVERT = 'string1' , 'string2' onde a string1 é o caminho do datafile no ambiente primário e a string2 é o caminho do datafile no standby.
Por exemplo, imaginando que estivessemos trabalhando com filesystem /u01/oraprd/datafiles como destino de produção e o filesystem /u01/standby/datafiles como destino do standby. O parametro pode ser definido da seguinte forma.
alter system set db_file_name_convert='/u01/oraprd/datafiles','/u01/standby/datafiles' scope=spfile;
SQL> alter system set db_file_name_convert='/u01/oraprd/datafiles','/u01/standby/datafiles' scope=spfile; System altered. SQL>
Por hoje, era isso. :)
Comentários
Postar um comentário