My Headlines
There seems to be a misunderstanding that a MOUNT actually verifies datafiles.
A STARTUP MOUNT (or STARTUP NOMOUNT followed by ALTER DATABASE MOUNT) does *NOT* read the datafiles and/or verify them. It does read the controlfile(s).
Here's a simple test :
I have a tablespace with a datafile that is "ONLINE". A STARTUP MOUNT (or STARTUP NOMOUNT followed by ALTER DATABASE MOUNT) does *NOT* read the datafiles and/or verify them. It does read the controlfile(s).
Here's a simple test :
SQL> create tablespace X_TBS datafile '/tmp/X_TBS.dbf' size 50M; Tablespace created. SQL> create table hemant.X_TBS (col_1) tablespace X_TBS 2 as select rownum from dual connect by level < 100; Table created. SQL> SQL> select file#, status, name 2 from v$datafile 3 where name like '%X_TBS%'; FILE# STATUS NAME ---------- ------- ---------------------------------------- 14 ONLINE /tmp/X_TBS.dbf SQL> select file#, status, name 2 from v$datafile_header 3 where name like '%X_TBS%'; FILE# STATUS NAME ---------- ------- ---------------------------------------- 14 ONLINE /tmp/X_TBS.dbf SQL> select owner, segment_name, bytes/1024 2 from dba_segments 3 where tablespace_name = 'X_TBS'; OWNER ------------------------------ SEGMENT_NAME -------------------------------------------------------------------------------- BYTES/1024 ---------- HEMANT X_TBS 64 SQL>I now shutdown the database instance and remove the datafile :
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> !ls /tmp/X_TBS.dbf /tmp/X_TBS.dbf SQL> !rm /tmp/X_TBS.dbf SQL> !ls /tmp/X_TBS.dbf ls: /tmp/X_TBS.dbf: No such file or directory SQL>Does the STARTUP MOUNT succeed ?
SQL> startup mount ORACLE instance started. Total System Global Area 535662592 bytes Fixed Size 1337720 bytes Variable Size 213911176 bytes Database Buffers 314572800 bytes Redo Buffers 5840896 bytes Database mounted. SQL> SQL> shutdown ORA-01109: database not open Database dismounted. ORACLE instance shut down. SQL> startup nomount; ORACLE instance started. Total System Global Area 535662592 bytes Fixed Size 1337720 bytes Variable Size 213911176 bytes Database Buffers 314572800 bytes Redo Buffers 5840896 bytes SQL> alter database mount; Database altered. SQL>Can the file be listed ? Yes. However, V$DATAFILE_HEADER no longer shows the name ! The query on V$DATAFILE_HEADER does cause Oracle to "look" for the file but it does NOT cause a failure. It simply finds it "missing".
SQL> select file#, status, name 2 from v$datafile 3 where file#=14; FILE# STATUS NAME ---------- ------- ---------------------------------------- 14 ONLINE /tmp/X_TBS.dbf SQL> select file#, status, name 2 from v$datafile_header 3 where file#=14; FILE# STATUS NAME ---------- ------- ---------------------------------------- 14 ONLINE SQL>When does Oracle attempt to access the datafile ?
SQL> alter database open; alter database open * ERROR at line 1: ORA-01157: cannot identify/lock data file 14 - see DBWR trace file ORA-01110: data file 14: '/tmp/X_TBS.dbf' SQL>Even as the OPEN failed with an ORA-01157, the datafile is present in the controlfile :
SQL> select file#, status, name 2 from v$datafile 3 where file#=14; FILE# STATUS NAME ---------- ------- ---------------------------------------- 14 ONLINE /tmp/X_TBS.dbf SQL> select file#, status, name 2 from v$datafile_header 3 where file#=14; FILE# STATUS NAME ---------- ------- ---------------------------------------- 14 ONLINE SQL>I hope that I have you convinced that a MOUNT does NOT verify the datafiles. If you are still not convinced, read the Backup and Recovery documentation about how to do a FULL DATABASE RESTORE and RECOVER -- where you restore the controlfile and mount the database before you even restore datafiles. How would the MOUNT succeed with the controlfile alone ?
Now, here's something more. You'd understand this if you understand how RECOVER works. Do NOT try this if you are not sure about how I was able to "recreate" the datafile. Do NOT try this if you do not know how data is inserted in the X_TBS table when the database is in NOARCHIVELOG mode.
SQL> alter database create datafile 14 as '/tmp/new_X_TBS.dbf'; Database altered. SQL> recover datafile 14; Media recovery complete. SQL> select file#, status, name 2 from v$datafile 3 where file#=14; FILE# STATUS NAME ---------- ------- ---------------------------------------- 14 ONLINE /tmp/new_X_TBS.dbf SQL> select file#, status, name 2 from v$datafile_header 3 where file#=14; FILE# STATUS NAME ---------- ------- ---------------------------------------- 14 ONLINE /tmp/new_X_TBS.dbf SQL> alter database open; Database altered. SQL> select tablespace_name from dba_tables 2 where owner = 'HEMANT' 3 and table_name = 'X_TBS'; TABLESPACE_NAME ------------------------------ X_TBS SQL> SQL> select file_name from dba_data_files 2 where file_id=14; FILE_NAME -------------------------------------------------------------------------------- /tmp/new_X_TBS.dbf SQL> SQL> select count(*) from hemant.X_TBS; select count(*) from hemant.X_TBS * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 14, block # 131) ORA-01110: data file 14: '/tmp/new_X_TBS.dbf' ORA-26040: Data block was loaded using the NOLOGGING option SQL>Happy simulating and testing on your own database.
Subscribe to:
Post Comments (Atom)
Popular Posts
-
What is ENUM? ENUM is short for enumeration. Its a useful programming type that contains an ordered list of string values. The program...
-
A colleague asked me some questions about FIRST_ROWS and ALL_ROWS, but I'm hesitant to blog about it because it's already been done...
-
Dear Blog Readers, Every now and then I do receive e-mails from the novice DBAs saying that: “We could not perform well at the interview...
-
HowTo: Create a universal UDM report page in OEM PROBLEM: You have a bunch of User Defined Metrics (UDM) setup in OEM, and you want to kn...
-
Have you run the new Oracle 11g installer on *NIX and received a nasty message? It happened to me this week! So, let's say you downloa...
-
REM:********************************************************************************************** REM: Script : Max 50 I/O Informations R...
-
What is NOCOPY? 'NOCOPY' is an optional 'hint' to tell the PL/SQL 'compiler' not to go through the overhead of ma...
-
This blog post is for them; those who are desperately looking for free Oracle Certification dumps. Well, you might be surprised to see the...
-
I was browsing the Oracle Forums earlier today and this post with a bit of SQL to clear OEM alerts from mnazim , who always has good advice...
-
Having chosen Oracle SQL Developer as your preferred Oracle database tool, do you have to install and learn a new technology for supporting...
0 comments:
Post a Comment