ORA-01110: data file 14:'/opt/oracle/10.2.0.3.0/dbs/MISSING00014'

I forbindelse med nogle natlige flytninger, er det gået lidt galt for nogen databaser. Og f.eks kunne TS PROTALTAB se ud som ovenstående. Kigger man nærmere på operativ systemmet - ligger datafilen tilhørende TS helt fint, men refereres altså med navnet MISSING, og i dette tilfælde fil nummer 14.

Databasen er her en udviklings database, og for tilfældet vil jeg forsøge, at tage systemtest og hente ind via transportable tablespaces.

1. Sørg for datafilen for tablespacet er offline

2. Find en database hvor der ikke findes segment referencer udenfor TS og sæt TS read only.

[workday:SOURCE:/home1/usr/oracle/kbirch/] sqlplus / as sysdba

SQL*Plus: Release 10.2.0.3.0 - Production on Wed Jul 30 08:29:21 2008

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

SQL> begin
  2     sys.dbms_tts.transport_set_check('PROTALTAB',TRUE);
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> select * from sys.transport_set_violations;

no rows selected

SQL> alter tablespace PROTALTAB read only;

Tablespace altered.

SQL> exit;

Vend tilbage til target databasen og drop tablespacet

[workday:TARGET:/home1/usr/oracle/kbirch/ALTER]sqlplus / as sysdba

SQL*Plus: Release 10.2.0.3.0 - Production on Wed Jul 30 08:29:21 2008

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

SQL> drop tablespace protaltab including content;

Tablespace dropped.

SQL> exit;

[workday:TARGET:/home1/usr/oracle/kbirch/ALTER] cd /oradev/databases/TARGET/

[workday:TARGET:/home1/usr/oracle/kbirch/ALTER] ls -ltr protaltab*

-rw-r-----   1 oracle   dba      671096832 Jul  3 17:03 protaltab_01.dbf

[workday:TARGET:/home1/usr/oracle/kbirch/ALTER] rm protaltab_01.dbf

Vend tilbage til source databasen og Lav exporten - det skal gøres som sysdba (på Solaris gøres dette med escape karakterer)

[workday:SOURCE:/home1/usr/oracle/kbirch/dump]exp "sys as sysdba" full=N file=protaltab.dmp tablespaces=PROTALTAB transport_tablespace=Y tts_full_check=Y

Punkt 2 hvor vi checkede efter segment referencer og selectede fra sys.transport_set_violations. Hvis der nu havde været nogen, og man tænkte man ville prøve alligevel, er det her det bliver straffet med

ORA-29341: The transportable set is not self-contained

Næste step er kopiering (enten ftp eller cp) af datafil fra source databasen til target samt vores dump fil fra exporten.

Her ligger datafilen i, og placeres (kopieres) i:

[workday:TARGET:/home1/usr/oracle/kbirch/]cp /oradev/databases/SOURCE/protaltab_01.dbf /oradev/databases/TARGET/protaltab_01.dbf

Nu skulle vi så være klar til at importere vores TS metadata.

[workday:TARGET:/home1/usr/oracle/kbirch/] imp "sys as sysdba" file=protaltab.dmp tablespaces=PROTALTAB transport_tablespace=Y datafiles=/oradev/databases/TARGET/protaltab_01.dbf