天天看點

[20160329]表空間與資料檔案.txt

[20160329]表空間與資料檔案.txt

--昨天跟别人聊天,提到招聘DBA,一些dba這些基本的概念不清楚.

--表空間可以是一個邏輯的概念,包含多個資料檔案.而一個資料檔案僅僅屬于一個表空間.

--表空間offline,一般不需要recover 恢複.除非加入immediate 參數.

--而資料檔案offline,一定需要恢複,才能online.如果是非歸檔模式必須在後面加入drop參數(自己曾經對于這存在混亂).

--不要誤解後面這個drop不是删除的意思,我以前了解就存在錯誤.

--而是表示可能無法恢複.

--表空間可以設定為read only,資料檔案不行.

--通過例子說明其中的細節:

1.環境:

SCOTT@book> @ &r/ver1

PORT_STRING                    VERSION        BANNER

------------------------------ -------------- --------------------------------------------------------------------------------

x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

CREATE TABLESPACE TEA DATAFILE

  '/mnt/ramdisk/book/tea01.dbf' AUTOEXTEND OFF

LOGGING

ONLINE

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO

FLASHBACK ON;

2.表空間offline:

SYS@book> alter tablespace tea offline;

Tablespace altered.

SYS@book> alter tablespace tea online;

-- 不需要恢複。

SYS@book> alter tablespace tea offline immediate;

alter tablespace tea online

*

ERROR at line 1:

ORA-01113: file 7 needs media recovery

ORA-01110: data file 7: '/mnt/ramdisk/book/tea01.dbf'

-- 可以發現加入參數immediate,不會發檔案檢查點,需要恢複。

SYS@book> recover datafile 7;

Media recovery complete.

3.資料檔案offline:

SYS@book> alter database datafile 7 offline;

Database altered.

SYS@book> alter database datafile 7 online;

alter database datafile 7 online

--資料檔案offline,要online必須恢複。也就是offline不會發檔案檢查點。

--我的測試庫是設定在歸檔模式的,加不加drop一樣.

SYS@book> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /u01/app/oracle/archivelog/book

Oldest online log sequence     16

Next log sequence to archive   18

Current log sequence           18

SYS@book> alter database datafile 7 offline drop;

4.資料檔案offline,再online可以不需要恢複嗎?

--隻要先表空間offline,或者read only

--注意這個時候不需要恢複,雖然資料檔案online了,但是表空間并沒有online。

SYS@book> SELECT file#, CHECKPOINT_CHANGE#, CHECKPOINT_TIME,CREATION_CHANGE#  , RESETLOGS_CHANGE#,status, CHECKPOINT_COUNT,fuzzy,name,tablespace_name  FROM v$datafile_header;

FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME     CREATION_CHANGE# RESETLOGS_CHANGE# STATUS  CHECKPOINT_COUNT FUZ NAME                             TABLESPACE_NAME

----- ------------------ ------------------- ---------------- ----------------- ------- ---------------- --- -------------------------------- ----------------

    1        13227498882 2016-03-29 15:19:56                7       13227286650 ONLINE              1003 YES /mnt/ramdisk/book/system01.dbf   SYSTEM

    2        13227498882 2016-03-29 15:19:56             1834       13227286650 ONLINE               999 YES /mnt/ramdisk/book/sysaux01.dbf   SYSAUX

    3        13227498882 2016-03-29 15:19:56           923328       13227286650 ONLINE               919 YES /mnt/ramdisk/book/undotbs01.dbf  UNDOTBS1

    4        13227498882 2016-03-29 15:19:56            16143       13227286650 ONLINE              1003 YES /mnt/ramdisk/book/users01.dbf    USERS

    5        13227498882 2016-03-29 15:19:56           952916       13227286650 ONLINE               916 YES /mnt/ramdisk/book/example01.dbf  EXAMPLE

    6        13227498882 2016-03-29 15:19:56          1314508       13227286650 ONLINE               932 YES /mnt/ramdisk/book/sugar01.dbf    SUGAR

    7        13227499647 2016-03-29 15:30:21      13227207527       13227286650 ONLINE                41 YES /mnt/ramdisk/book/tea01.dbf      TEA

7 rows selected.

SYS@book> select * from scott.empx where rownum<=1;

select * from scott.empx where rownum<=1

                    *

ORA-00376: file 7 cannot be read at this time

SYS@book> select tablespace_name,status from dba_tablespaces where tablespace_name in ('TEA','SYSTEM');

TABLESPACE_NAME                STATUS

------------------------------ ---------

SYSTEM                         ONLINE

TEA                            OFFLINE

TEA                            ONLINE

       EMPNO ENAME      JOB                MGR HIREDATE                     SAL         COMM       DEPTNO

------------ ---------- --------- ------------ ------------------- ------------ ------------ ------------

        7369 YYYY       CLERK             7902 1980-12-17 00:00:00          800                        20

--還有1種情況不需要恢複(不過這個是假的),就是在mount模式下online,等open時才需要恢複.實際上還是要恢複。

shutdown immediate

SYS@book> startup mount

ORACLE instance started.

Total System Global Area    634732544 bytes

Fixed Size                    2255792 bytes

Variable Size               197133392 bytes

Database Buffers            427819008 bytes

Redo Buffers                  7524352 bytes

Database mounted.

--可以發現在mount狀态下online資料檔案不需要恢複。

----- ------------------ ------------------- ---------------- ----------------- ------- ---------------- --- -------------------------------- ---------------

    1        13227500957 2016-03-29 15:35:56                7       13227286650 ONLINE              1006 NO  /mnt/ramdisk/book/system01.dbf   SYSTEM

    2        13227500957 2016-03-29 15:35:56             1834       13227286650 ONLINE              1002 NO  /mnt/ramdisk/book/sysaux01.dbf   SYSAUX

    3        13227500957 2016-03-29 15:35:56           923328       13227286650 ONLINE               922 NO  /mnt/ramdisk/book/undotbs01.dbf  UNDOTBS1

    4        13227500957 2016-03-29 15:35:56            16143       13227286650 ONLINE              1006 NO  /mnt/ramdisk/book/users01.dbf    USERS

    5        13227500957 2016-03-29 15:35:56           952916       13227286650 ONLINE               919 NO  /mnt/ramdisk/book/example01.dbf  EXAMPLE

    6        13227500957 2016-03-29 15:35:56          1314508       13227286650 ONLINE               935 NO  /mnt/ramdisk/book/sugar01.dbf    SUGAR

    7        13227500662 2016-03-29 15:35:04      13227207527       13227286650 ONLINE                44 YES /mnt/ramdisk/book/tea01.dbf      TEA

SYS@book> alter database open;

alter database open

--在open時提示要恢複資料檔案7.

5.測試表空間read only的情況:

SYS@book> alter tablespace tea read only ;

SYS@book> update scott.empx set ename ='aaaa' where empno=7369;

update scott.empx set ename ='aaaa' where empno=7369

             *

ORA-00372: file 7 cannot be modified at this time

SYS@book> alter tablespace tea read write ;

--總之,隻要概念清晰,上面的操作很好了解。

繼續閱讀