Você está na página 1de 6

Offline Datafiles and Offline tablespaces mode.

Archivelog mode gives us the opportunity to online backup our databases as well archivelog mode is a must in every zero data loss scenario. More about that elsewhere and later. Right now I will highlight some functionality with regard to offlining datafiles, tablespaces and I will highlight the differences with respect to archivelog mode either non archivelog mode. Taking tablespaces & datafiles offline makes them unavailable for the online database operations (sounds logic). Whereas it does not take a hero to use these powerfull options you should be ware of what you are doing. In a nutshell and when your database runs in non archivelog mode 1. You cannot offline datafiles when the database is open 2. You can only offline normal non system tablespaces. Since offline normal of a tablespace involves checkpointing of the datafiles of that tablespace, no recovery will be needed to online the tablespace in the future. 3. When your database is not open, you can offline drop some datafiles, which can be interesting, necessary when you need to do a partial restore of a database (may I assume you are aware that a system tablespace is always necessary ?) The offline drop means you are asking the database - the controlfile - to continue without that datafile. In a nutshell and when your database runs in archivelog mode In addition to the above points 1 and 2 4. You can offline datafiles when the database is open. Please be aware the datafiles will have the status recover in v$datafile. In order to have them online again all the (archived) redo generated between the offline and online of the datafile(s) concerned must be available. BE AWARE OF THIS BEFORE OFFLINING A DATAFILE !!! 5. Despite the fact that offline normal is recommended whenever possible you can offline immediate either offline temporary tablespaces. Offline immediate will force all the datafiles towards status recover (v$datafile), they are not checkpointed whereas an offline temporary will checkpoint those datafiles which are available at the moment of offlining the tablespace. In order to have them online again all the (archived) redo generated between the offline and online of the tablespace(s) concerned must be available. BE AWARE OF THIS BEFORE OFFLINING A TABLESPACE !!! 6. In stead of point 4 when your database is not open, you can offline some datafiles, which can be interesting, necessary when you need to do a partial restore of a database (may I assume you are aware that a system tablespace is always necessary ?) It' s time for some gym right now, Here I show you my database runs in archivelog mode, further I will list the tablespaces and datafiles with their status. SQL> select name,log_mode from v$database; NAME LOG_MODE --------------- -----------UTF8 ARCHIVELOG

SQL> select tablespace_name,status from dba_tablespaces; TABLESPACE_NAME STATUS ------------------------------ --------SYSTEM ONLINE SYSAUX ONLINE TEMP ONLINE USERS ONLINE UNDOTBS2 ONLINE USERS_16K ONLINE CW4ORA_DATA ONLINE CW4ORA_INDX ONLINE USERS2 ONLINE USER_LOB ONLINE 10 rows selected. SQL> select file_name,status from dba_data_files; C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_UNDOTBS2_1JOTM2S4_.DBF AVAILABLE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_USERS_16_1M08DN7D_.DBF AVAILABLE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_SYSTEM_1DT8JGN2_.DBF AVAILABLE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_SYSAUX_1NBJ85GR_.DBF AVAILABLE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_USERS_1DT8LVYG_.DBF AVAILABLE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_CW4ORA_D_1OH2VGQP_.DBF AVAILABLE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_CW4ORA_I_1OH2XWW4_.DBF AVAILABLE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_USERS2_1V1OPZWO_.DBF AVAILABLE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_USER_LOB_1WKM1WSD_.DBF AVAILABLE 9 rows selected. SQL> select name,status from v$datafile; C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_SYSTEM_1DT8JGN2_.DBF SYSTEM C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_USERS_16_1M08DN7D_.DBF ONLINE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_SYSAUX_1NBJ85GR_.DBF ONLINE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_USERS_1DT8LVYG_.DBF ONLINE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_UNDOTBS2_1JOTM2S4_.DBF ONLINE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_CW4ORA_D_1OH2VGQP_.DBF ONLINE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_CW4ORA_I_1OH2XWW4_.DBF ONLINE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_USERS2_1V1OPZWO_.DBF ONLINE C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_USER_LOB_1WKM1WSD_.DBF ONLINE

9 rows selected. Exercise 1 : Let us offline normal the users tablespace SQL> alter tablespace users offline; Tablespace altered. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 524288000 bytes Fixed Size 1249968 bytes Variable Size 427822416 bytes Database Buffers 92274688 bytes Redo Buffers 2940928 bytes Database mounted. Database opened. SQL> alter tablespace users online; Tablespace altered. Since offline normal of a tablespace involves checkpointing of the datafiles of that tablespace, no recovery will be needed to online the tablespace in the future. Exercise 2 : Let us offline immediate the users tablespace and have some dirty blocks from that tablespace in the buffer cache SQL> create table my_utf.t_ofline tablespace users as select * from my_utf.wip_wo where rownum < 10000; Table created. SQL> alter tablespace users offline immediate; Tablespace altered. SQL> shutdown abort; -- a crash occurs ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 524288000 bytes Fixed Size 1249968 bytes Variable Size 427822416 bytes Database Buffers 92274688 bytes Redo Buffers 2940928 bytes Database mounted. Database opened. This scenario invoked a need for recovery. Since I did not delete any archive, online redologs ... this is what the alert file is showing me Completed redo scan 10001 redo blocks read, 101 data blocks need recovery Tue Feb 07 17:26:34 2006 Started redo application at Thread 1: logseq 4406, block 182052 Tue Feb 07 17:26:35 2006 Recovery of Online Redo Log: Thread 1 Group 5 Seq 4406 Reading mem 0

Mem# 0 errs 0: C:\ORACLE\ORADATA\UTF8\BRUSSELS\ONLINELOG\O1_MF_5_1NW3T6PR_.LOG Mem# 1 errs 0: C:\ORACLE\FLASH_RECOVERY_AREA\BRUSSELS\ONLINELOG\O1_MF_5_1NW3TPTB_.LOG Tue Feb 07 17:26:37 2006 Completed redo application Tue Feb 07 17:26:37 2006 Completed crash recovery at Thread 1: logseq 4406, block 192053, scn 10601680 101 data blocks read, 101 data blocks written, 10001 redo blocks read Let us bring the users tablespace online again. SQL> alter tablespace users online; alter tablespace users online * ERROR at line 1: ORA-01113: file 4 needs media recovery ORA-01110: data file 4: 'C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_USERS_1DT8LVYG_.DBF' Offline immediate will force all the datafiles towards status recover (v$datafile), they are not checkpointed whereas an offline temporary will checkpoint those datafiles which are available at the moment of offlining the tablespace. In order to have them online again all the (archived) redo generated between the offline and online of the tablespace(s) concerned must be available. SQL> recover datafile 4; >>>> THAT' S THE DATAFILE IN THE USERS TABLESPACE Media recovery complete. SQL> select status from v$datafile; STATUS ------SYSTEM ONLINE ONLINE OFFLINE >>>> THAT' S THE DATAFILE IN THE USERS TABLESPACE ONLINE ONLINE ONLINE ONLINE ONLINE 9 rows selected. SQL> select status from dba_tablespaces; STATUS --------ONLINE ONLINE ONLINE OFFLINE >>>> THAT' S THE USERS TABLESPACE ONLINE ONLINE ONLINE ONLINE ONLINE ONLINE 10 rows selected. SQL> alter tablespace users online; Tablespace altered.

SQL> select status from dba_tablespaces; -- the users tablespace will be online STATUS --------ONLINE ONLINE ONLINE ONLINE ONLINE ONLINE ONLINE ONLINE ONLINE ONLINE 10 rows selected. And what is the alertfile us telling ? alter tablespace users online Tue Feb 07 17:39:50 2006 ORA-1113 signalled during: alter tablespace users online... Tue Feb 07 17:40:03 2006 ALTER DATABASE RECOVER datafile 4 Tue Feb 07 17:40:04 2006 Media Recovery Start Tue Feb 07 17:40:04 2006 Recovery of Online Redo Log: Thread 1 Group 5 Seq 4406 Reading mem 0 Mem# 0 errs 0: C:\ORACLE\ORADATA\UTF8\BRUSSELS\ONLINELOG\O1_MF_5_1NW3T6PR_.LOG Mem# 1 errs 0: C:\ORACLE\FLASH_RECOVERY_AREA\BRUSSELS\ONLINELOG\O1_MF_5_1NW3TPTB_.LOG Completed: ALTER DATABASE RECOVER datafile 4 Tue Feb 07 17:42:02 2006 alter tablespace users online Tue Feb 07 17:42:03 2006 Completed: alter tablespace users online Exercise 3 : Let us offline a datafile SQL> create table my_utf.t_offline tablespace users as select * from my_utf.wip_wo where rownum < 10001; Table created. SQL> select file#,status,checkpoint_change# from v$datafile; FILE# STATUS CHECKPOINT_CHANGE# ---------- ------- -----------------1 SYSTEM 10605504 2 ONLINE 10605504 3 ONLINE 10605504 4 ONLINE 10605504 5 ONLINE 10605504 6 ONLINE 10605504 7 ONLINE 10605504 8 ONLINE 10605504 9 ONLINE 10605504 9 rows selected. SQL> alter database datafile 4 offline; -- Please note datafile 4 is the one from the users tablespace (see above) Database altered. SQL> alter system checkpoint; System altered. SQL> select file#,status,checkpoint_change# from v$datafile;

FILE# STATUS CHECKPOINT_CHANGE# ---------- ------- -----------------1 SYSTEM 10606294 2 ONLINE 10606294 3 ONLINE 10606294 4 RECOVER 10605504 >> Haven' t I told you : status recover and not checkpointed 5 ONLINE 10606294 6 ONLINE 10606294 7 ONLINE 10606294 8 ONLINE 10606294 9 ONLINE 10606294 9 rows selected. SQL> alter database datafile 4 online; alter database datafile 4 online * ERROR at line 1: ORA-01113: file 4 needs media recovery ORA-01110: data file 4: 'C:\ORACLE\ORADATA\UTF8\BRUSSELS\DATAFILE\O1_MF_USERS_1DT8LVYG_.DBF' SQL> recover datafile 4; Media recovery complete. SQL> alter database datafile 4 online; Database altered. Please note I listed the interesting column checkpoint_change# available in v$database,v$datafile,v$datafile_header, I waited until the end with it, to renumerate the one who has read this entire page. Now it is up to you to test. (start with testdatabases !) Be prudent with offlining tablespaces and datafiles in production databases. !

Você também pode gostar