grid,日誌文件,密碼文件,控制文件,表空間

1    srvctlsql

[root@wangzilong oracle]# srvctl 
Usage: srvctl <command> <object> [<options>]
    commands: enable|disable|start|stop|status|add|remove|modify|getenv|setenv|unsetenv|config|upgrade
    objects: database|service|asm|diskgroup|listener|home|ons
For detailed help on each command and object and its options use:
  srvctl <command> -h or
  srvctl <command> <object> -h

    1.1 看幫助數據庫

        srvctl start -h安全

[root@wangzilong oracle]# srvctl start -h

The SRVCTL start command starts, Oracle Restart enabled, non-running objects.

Usage: srvctl start database -d <db_unique_name> [-o <start_options>]
Usage: srvctl start service -d <db_unique_name> [-s "<service_name_list>"] [-o <start_options>]
Usage: srvctl start asm [-o <start_options>]
Usage: srvctl start listener [-l <lsnr_name>]
Usage: srvctl start diskgroup -g <dg_name>
Usage: srvctl start ons [-v]
Usage: srvctl start home -o <oracle_home> -s <state_file>
For detailed help on each command and object and its options use:
  srvctl <command> <object> -h

    1.2 看數據庫是否已經啓動bash

bash-4.1$ srvctl status database -d orcl
Database is running.
bash-4.1$ crs_stat -t ora.orcl.db
Name           Type           Target    State     Host        
------------------------------------------------------------
ora.orcl.db    ora....se.type ONLINE    ONLINE    wangzilong 
#
bash-4.1$ crs_stat -t ora.orcl.db
Name           Type           Target    State     Host        
------------------------------------------------------------
ora.orcl.db    ora....se.type ONLINE    ONLINE    wangzilong  
bash-4.1$ crs_stat  ora.orcl.db
NAME=ora.orcl.db
TYPE=ora.database.type
TARGET=ONLINE
STATE=ONLINE on wangzilong

#crs_start 啓動
#crs_stop 關閉

2    實例啓動的階段服務器

    sqlplus啓動的三個階段session

    2.1 nomount 實例啓動階段(參數文件)數據結構

            startup nomount;oracle

            根據參數文件的位置啓動實例,工具

            根據參數文件中定義數據庫的名字,參數文件中內存的分配狀況,參數文件定義的權限、位置和個數,將這些過程寫入到用戶日誌和告警日誌,啓動後臺進程,初始化部分視圖。(v$parameter,v$spprameter 就能夠訪問)spa

    2.2 mount 數據庫的裝載(使用參數文件和控制文件)

        alter database mount;

        更具參數文件中定義的控制文件的位置和個數裝載數據庫。

    2.3 open 階段,叫作數據庫的打開階段

        根據控制文件中定義的數據庫名,數據文件和日誌文件的名字,位置,個數。(控制文件中的記錄的SCN 號和數據庫文件,日誌文件是否一致,若是一致,數據庫打開,若是不一致,啓動的時候作實例恢復)

 

 3    實例關閉的階段

    3.1 close-- 關閉數據庫

        alter database close;關閉數據庫文件和日誌文件

    3.2 dismount  卸載數據庫

        alter database dismount 將實例與數據庫連接斷開

    3.3 shutdown 關閉實例

        shutdown

4    實例關閉的模式

    4.1 shutdonw |shutdown normal 正常關閉(不推薦)

        old connect 等待

        ckpt

        如同有用戶尚未推出,則要一直等待,因此不推薦

    4.2 shutdown immediate 一致性關閉

            相比上面的關閉,若是有老的連接不會等待,直接回滾。

    4.3 shutdown transactional 居於事務的關閉數據庫

        old connect 等事物結束

        ckpt

    4.4 shutdown abort 強制關閉

            通常不會使用,只有前面三種沒有辦法關閉的時候(出了故障)強制關閉

   

5 文件管理

   生命週期:nomount--mount--open--close--dismount--shutdown

    5.1 參數文件管理

  • 二進制參數文件:spfile 。spfileORACLE_SID.ora.例如spfileorcl.ora默認位置在$ORACLE_HOME/dbs/spfile*.ora,只能在服務器上使用
  • 文本參數文件:pfile 。名字通常是initORACLE_SID.ora 位置在$ORACLE_HOME/dbs/init*.ora,服務器和客戶端均可以使用
  • 二進制參數文件和文本參數文件的優先級:spfileORACLE_SID.ora -- spfile。ora--initORACLE_SID.ora--init.ora
  • 二進制參數文件和文本參數文件能夠相互裝換
  • show parameter spfile,若是有則表示使用的是二進制參數文件啓動,不然則表示使用的是文本參數文件啓動數據庫
  • create pfile from spfile;二進制裝爲文本文件。路徑默認是在$ORACLE_HOME/dbs spfile文件能夠指定路徑。
  • create spfile from pfile 文本參數文件轉換爲二進制參數文件。
  • select name,value from v$spparameter; 能夠看參數文件中能夠定義那些參數.
  • 動態參數:參數修改後不須要重啓數據庫,當即生效的。
  • 靜態參數:當前不會生效,數據庫重啓以後纔有效。alter system set 參數名=值,若是能成功,則說明是動態的參數。alter system set 參數名 = 值 scope=spfile|memory|both; 若是這樣修改才能成功的說明是靜態參數
  • 會話參數:修改以後只在當前會話有效,其餘會話無效 alter session set 參數名

    5.2 密碼文件管理

    5.3 控制文件管理

    5.4 日誌文件管理

            1    日誌文件做用

                記錄用戶的DML,部分DDL 操做,以及管理員對數據庫的更改。主要用來作恢復使用。

            2    日誌文件的工做原理

                    日誌文件經過lgwr 進程將日誌緩衝區中的內容順序存放在日誌文件中。

                    current:表示當前正在使用的日誌組

                    active 活動狀態:表示記錄的日誌信息有可能尚未寫入日誌文件,若是丟失會丟數據

                   inactive:表示非活動狀態,表示這種狀態的信息已經所有記錄在日誌文件中,文件丟失不會影響數據庫數據的丟失

                    unused:表示歷來都沒有使用過,通常不會看見的。

                    日誌組:一個數據庫中至少要有兩個組,一個組下面的日誌文件叫作日誌成員,每一個組下面至少要有一個日誌文件。每一個組下面的日誌文件都是同樣的,互爲鏡像。1個日誌中的成員日誌文件大小都是同樣的。日誌文件中有lsn 日誌編號。

select group#,status from v$log;

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
	 1 INACTIVE
	 2 INACTIVE
	 3 CURRENT

            3    日誌文件在項目中的規劃

                    至少有3個組,一個組下面至少有2個日誌成員,且分開存放。日誌切換表示一個組寫慢再寫下一個組,日誌切換時間保證在15到30分鐘切一次才三正常。v$log_history 裏面記錄了每一次切換日誌的時間

SQL> select recid,first_time from v$log_history;

     RECID FIRST_TIM
---------- ---------
	 1 18-NOV-16
	 2 18-NOV-16
	 3 18-NOV-16
	 4 18-NOV-16
	 5 18-NOV-16

 

            4    日誌文件的管理

                日誌組的增長:日誌組不能知足業務須要的時候增長一個日誌組。alter database add logfile group groupname (‘log_file_path1’,'log_file_path2',…)  size group_size

SQL> select group#,bytes/1024/1024 from v$log;

    GROUP# BYTES/1024/1024
---------- ---------------
	 1		50
	 2		50
	 3		50
  1* alter database add logfile group 4 ('/u01/product/oradata/orcl/redo04.log','/u01/product/oradata/orcl/redo041.log') size 50M
SQL> /

Database altered.
  1* select a.group#,b.member from v$log a,v$logfile b where a.group# = b.group#
SQL> /

    GROUP# MEMBER
---------- --------------------
########## /u01/product/oradata
	   /orcl/redo03.log

########## /u01/product/oradata
	   /orcl/redo02.log

########## /u01/product/oradata
	   /orcl/redo01.log

########## /u01/product/oradata
	   /orcl/redo04.log

    GROUP# MEMBER
---------- --------------------

########## /u01/product/oradata
	   /orcl/redo041.log
#日誌增長成功

 

                日誌組的刪除:

                current 的日誌是不能刪除的。只有最後兩個日誌組的時候是不能刪除的。

                actinve 的日誌不能刪除

                alter database drop logfile group group_name.組刪除以後實體文件能夠不刪除,也能夠刪除,不影響系統的運行。

SQL> select a.group#,b.member,a.status from v$log a,v$logfile b where a.group# = b.group#;

    GROUP# MEMBER					      STATUS
---------- -------------------------------------------------- ----------------
	 3 /u01/product/oradata/orcl/redo03.log 	      CURRENT
	 2 /u01/product/oradata/orcl/redo02.log 	      INACTIVE
	 1 /u01/product/oradata/orcl/redo01.log 	      INACTIVE
	 4 /u01/product/oradata/orcl/redo04.log 	      UNUSED
	 4 /u01/product/oradata/orcl/redo041.log	      UNUSED

# 下面準備刪除current狀態下的日誌
SQL> alter database drop logfile group 3;
alter database drop logfile group 3
*
ERROR at line 1:
ORA-01623: log 3 is current log for instance orcl (thread 1) - cannot drop
ORA-00312: online log 3 thread 1: '/u01/product/oradata/orcl/redo03.log'
# 報錯,不能刪除current狀態的日誌組
SQL> alter database drop logfile group 1;

Database altered.
# 刪除inactive 狀態下的是能夠的。
SQL> select a.group#,b.member,a.status from v$log a,v$logfile b where a.group# = b.group#;

    GROUP# MEMBER					      STATUS
---------- -------------------------------------------------- ----------------
	 3 /u01/product/oradata/orcl/redo03.log 	      CURRENT
	 2 /u01/product/oradata/orcl/redo02.log 	      INACTIVE
	 4 /u01/product/oradata/orcl/redo04.log 	      UNUSED
	 4 /u01/product/oradata/orcl/redo041.log	      UNUSED

                日誌組下成員的增長:

                alter database add logfile member 'path' to group group_name;

SQL> alter database add logfile member '/u01/product/oradata/orcl/redo21.log' to group 2;

Database altered.
SQL> select a.group#,b.member,a.status from v$log a,v$logfile b where a.group# = b.group#;

    GROUP# MEMBER					      STATUS
---------- -------------------------------------------------- ----------------
	 3 /u01/product/oradata/orcl/redo03.log 	      CURRENT
	 2 /u01/product/oradata/orcl/redo02.log 	      INACTIVE
	 2 /u01/product/oradata/orcl/redo21.log 	      INACTIVE
	 4 /u01/product/oradata/orcl/redo04.log 	      UNUSED
	 4 /u01/product/oradata/orcl/redo041.log	      UNUSED
# 組下成員增長成功

                日誌組下成員的刪除:

                若是一個組下面只有一個成員不能刪除

                current,active 狀態的日誌成員是不能被刪除的。

                alter database drop logfile member ‘path’;

SQL> alter database drop logfile member '/u01/product/oradata/orcl/redo21.log';

Database altered.
# 組下成員刪除成功

                日誌組的擴容,先新建符合大小的日誌文件,在用下面的命令切換,最後在把原來的日誌文件刪除。               

                  切換日誌(多切換幾回) alter system switch logfile; 把原來的日誌文件都切換成inactive 狀態下刪除就能夠了。

SQL> select a.group#,b.member,a.status ,a.bytes from v$log a,v$logfile b where a.group# = b.group#;

    GROUP# MEMBER					      STATUS		    BYTES
---------- -------------------------------------------------- ---------------- ----------
	 5 /u01/product/oradata/orcl/redo05.log 	      CURRENT		104857600
	 6 /u01/product/oradata/orcl/redo06.log 	      INACTIVE		104857600
	 7 /u01/product/oradata/orcl/redo07.log 	      INACTIVE		104857600
# 日誌文件已經擴大到100M

                日誌文件的丟失:

                        inactive 丟失(運行狀態下)

                                alter database clear logfile group group_name ;這個系統會自動建立系統中配置的有的日誌文件,只是從新建的日誌文件裏面沒有內容。

                        若是在重啓數據庫的狀況下須要作一下三步:

SQL> select a.group#,b.member,a.status ,a.bytes from v$log a,v$logfile b where a.group# = b.group#;

    GROUP# MEMBER					      STATUS		    BYTES
---------- -------------------------------------------------- ---------------- ----------
	 5 /u01/product/oradata/orcl/redo05.log 	      CURRENT		104857600
	 6 /u01/product/oradata/orcl/redo06.log 	      INACTIVE		104857600
	 7 /u01/product/oradata/orcl/redo07.log 	      INACTIVE		104857600
# redo06.log 裏面的文件是inactive 狀態的,若是它丟失會怎麼了?
[root@wangzilong orcl]# rm -rf redo06.log
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
# 關閉數據庫
SQL> startup mount;
ORACLE instance started.

Total System Global Area 2438529024 bytes
Fixed Size		    2230792 bytes
Variable Size		  570426872 bytes
Database Buffers	 1845493760 bytes
Redo Buffers		   20377600 bytes
Database mounted.
# 數據庫掛載成功
SQL> recover database until cancel;
Media recovery complete.
# 須要讓數據庫不檢查日誌
SQL> alter database open resetlogs; 

Database altered.
# 在從新生成序列號的狀況下打開數據庫
[root@wangzilong orcl]# ll redo06.log
-rw-r----- 1 oracle dba 104858112 Dec  6 14:13 redo06.log
# 日誌文件6 已經從新建回來了。

                        active 丟失

                              alter system checkpoint;觸發ckpt 會把日誌文件中的寫入磁盤文件,而後日誌文件就會從active 文件切換到inactive 狀態下,而後再用上面的clear 把文件建回去。這隻能保證系統正常運行,可是會丟數據的。

GROUP# MEMBER					 STATUS 	       BYTES
---------- --------------------------------------------- ---------------- ----------
	 5 /u01/product/oradata/orcl/redo05.log 	 ACTIVE 	   104857600
	 6 /u01/product/oradata/orcl/redo06.log 	 CURRENT	   104857600
	 7 /u01/product/oradata/orcl/redo07.log 	 UNUSED 	   104857600
# 若是上面的文件5丟失了怎麼辦?
# 因爲active 文件表示日誌裏面還有髒數據沒有寫入磁盤,因此咱們須要手動觸發ckpt寫數據
SQL> alter system checkpoint;

System altered.
SQL> select a.group#,b.member,a.status ,a.bytes from v$log a,v$logfile b where a.group# = b.group#;

    GROUP# MEMBER					 STATUS 	       BYTES
---------- --------------------------------------------- ---------------- ----------
	 5 /u01/product/oradata/orcl/redo05.log 	 INACTIVE	   104857600
	 6 /u01/product/oradata/orcl/redo06.log 	 CURRENT	   104857600
	 7 /u01/product/oradata/orcl/redo07.log 	 UNUSED 	   104857600
# 日誌文件5 已經變成inactive
SQL> alter database clear logfile group 5;

Database altered.
# 用clear 日誌5從新建
[root@wangzilong orcl]# ll redo05.log
-rw-r----- 1 oracle dba 104858112 Dec  6 14:24 redo05.log

 

            若是是active狀態的日誌文件丟失後關閉數據庫,沒法重啓,如何處理?也和上面的inactive 同樣的操做。

                        current 丟失(啓動狀態下)

                            alter system switch logfile;

                            alter system checkpoing;

                            alter database clear logfile group group_name

                        current 丟失(關閉狀態下):

                            三部:啓動到mount,recover 不使用恢復,重建日誌方式打開

              日誌丟失重啓的時候報錯,須要不使用恢復,recover database until calcle

                alter datrabase open resetlogs;

            5    日誌文件相關的視圖

                    v$log

                    v$logfile

                    v$log_history

                    重點:組3個以上,成員分開,會增長組,增長成員,刪除成員如何處理。

            6 歸檔日誌 archivelog

                inactive -- arc 進程處理歸檔

                默認狀況下歸檔日誌放在閃回區,由db_recovery_file_dest='path'

                若是上面的路徑放滿列,能夠設置log_archive_dest

                 archive log list或者v$database;

SQL> archive log list;
Database log mode	       No Archive Mode
Automatic archival	       Disabled
Archive destination	       USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     1
Current log sequence	       1
# 查看是否有歸檔功能,Oldest online log sequence 表示下一個歸檔的日誌是1號

            設置爲歸檔:

                    startup mount

                    alter database archivelog;

SQL> startup mount;
ORACLE instance started.

Total System Global Area 2438529024 bytes
Fixed Size		    2230792 bytes
Variable Size		  570426872 bytes
Database Buffers	 1845493760 bytes
Redo Buffers		   20377600 bytes
Database mounted.
SQL> alter database archivelog;

Database altered.
SQL> alter database open;

Database altered.
SQL> archive log list;
Database log mode	       Archive Mode # 已經開啓歸檔
Automatic archival	       Enabled
Archive destination	       USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     1
Next log sequence to archive   1
Current log sequence	       1
# 歸檔日誌路徑
SQL> show parameter DB_RECOVERY_FILE_DEST;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest		     string	 /u01/product/fast_recovery_are
						 a
db_recovery_file_dest_size	     big integer 4122M
SQL> desc v$archived_log;
# 上面v$archived_log 裏面記錄歸檔日誌的詳細信息

SQL> alter database noarchivelog;

Database altered.
# 上面關閉歸檔
SQL> archive log list;
Database log mode	       No Archive Mode
Automatic archival	       Disabled
Archive destination	       USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     1
Current log sequence	       1

     

    5.5 用戶管理

    5.6 對象管理

 

7 控制文件

    7.1 控制文件的做用

            記錄數據結構與行爲

    7.2 控制文件在項目中的規劃

            控制文件最大能夠達到8個,最少1個。工做當中控制文件規劃是少2個以上,且分開存放。

              控制文件大小在100M 之內,若是超過100M就須要重建

SQL> desc v$controlfile;
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 STATUS 					    VARCHAR2(7)
 NAME						    VARCHAR2(513)
 IS_RECOVERY_DEST_FILE				    VARCHAR2(3)
 BLOCK_SIZE					    NUMBER
 FILE_SIZE_BLKS 				    NUMBER
# 名字,大小,下面還有一個也能看控制文件信息
SQL> desc v$controlfile_record_section;
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 TYPE						    VARCHAR2(28)
 RECORD_SIZE					    NUMBER
 RECORDS_TOTAL					    NUMBER
 RECORDS_USED					    NUMBER
 FIRST_INDEX					    NUMBER
 LAST_INDEX					    NUMBER
 LAST_RECID					    NUMBER
# 下面能夠看到控制文件的個數等信息
SQL> show parameter control_files;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
control_files			     string	 /u01/product/oradata/orcl/cont
						 rol01.ctl, /u01/product/fast_r
						 ecovery_area/orcl/control02.ct
						 l

    7.3 控制文件的管理

        7.3.1 控制文件增長

            1 若是數據庫是關閉狀態,則啓動,start nomount

            2 修改參數 control_files

            3 將存在的控制文件複製給新建的

            4 啓動。alter database mount;

            5 alter database open;

        alter system set control_file = …………,這裏原來的控制文件照抄,在本身增長一個

            6 若是數據庫是打開的,先修改參數control_files,shutdown immediate,將控制文件複製一份給新建的,startup

SQL> alter system set control_files='/u01/product/oradata/orcl/control01.ctl','/u01/product/fast_recovery_area/orcl/control02.ctl','/u01/product/oradata/orcl/control02.ctl' scope=spfile;
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified
# 增長完後報錯了,下面須要重啓並新建
[root@wangzilong orcl]# cp control01.ctl control02.ctl
# 新建登陸sqlplus 並啓動
[root@wangzilong orcl]# sqlplus sys/123456 as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Mon Dec 5 15:49:07 2016

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to an idle instance.
# 啓動
SQL> startup
ORACLE instance started.

Total System Global Area 2438529024 bytes
Fixed Size		    2230792 bytes
Variable Size		  570426872 bytes
Database Buffers	 1845493760 bytes
Redo Buffers		   20377600 bytes
Database mounted.
Database opened.
# 啓動成功,下面檢查添加的控制文件是否成功
SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/product/oradata/orcl/control01.ctl
/u01/product/fast_recovery_area/orcl/control02.ctl
/u01/product/oradata/orcl/control02.ctl

        注意:複製控制文件的時候必定要在oracle 用戶下

            7.3.2 控制文件減小

                1 shutdown immediate;shut abort;

                2 startup nomount

                3 修改參數

                4 alter database mount;

                    alter database open;

                解釋:直接把須要移除的控制文件刪除,配置文件裏面刪除重啓就能夠了。

        7.3.3 控制文件版本不一致的處理

                    只須要高版本的複製給低版本的就能夠了。

        7.3.4 控制文件部分丟失的處理

                    已有的複製給丟失的,或者直接刪除丟失的控制文件就能夠了。(前提是有備份)

        7.3.5 控制文件有備份全丟失的處理

                備份:alter database backup controlfile to '/tmp/con.ctl';備份的就是二進制控制文件。

SQL> alter database backup controlfile to '/tmp/cron.ctl';

Database altered.
[root@wangzilong tmp]# ll cron.ctl 
-rw-r----- 1 oracle dba 9748480 Dec  5 16:24 cron.ctl
# 這樣備份,若是控制文件丟失能夠直接把備份的拷貝過去就能夠用

                    alter database backup controlfile to trace as '/tmp/con.sql'; 備份控制文件成一個腳本。

SQL> alter database backup controlfile to trace as '/tmp/con.sql';

Database altered.

            這個備份若是要使用的須要用@ /tmp/con.sql  調用便可。

        7.3.6 控制文件沒有備份全丟失的處理

                只能手動寫了。

            create controlfile reuse database database_name noresetlogs noarchivelog

              logfile

             group 1 '/u01/oracle/oradata/updba/redo01.log' size 50M

             group 2 '/u01/oracle/oradata/updba/redo01.log' size 50M

             group 3 ^^^^^

            datafile

            '/u01/oracle/oradata/updba/system01.dbf',

            '/u01/oracle/oradata/updba/sysaux01.dbf',

            '/u01/oracle/oradata/updba/undotbs01.dbf',

            ^^^^

            charater set al32utf8

        上面的logfile,datafile 能夠在視圖裏面查:

# 日誌文件
SQL> select group#,member from v$logfile;

    GROUP#
----------
MEMBER
--------------------------------------------------------------------------------
	 3
/u01/product/oradata/orcl/redo03.log

	 2
/u01/product/oradata/orcl/redo02.log

	 1
/u01/product/oradata/orcl/redo01.log
# 數據文件
SQL> select file#,name from v$datafile;

     FILE#
----------
NAME
--------------------------------------------------------------------------------
	 1
/u01/product/oradata/orcl/system01.dbf

	 2
/u01/product/oradata/orcl/sysaux01.dbf

	 3
/u01/product/oradata/orcl/undotbs01.dbf


     FILE#
----------
NAME
--------------------------------------------------------------------------------
	 4
/u01/product/oradata/orcl/users01.dbf

 

8 存儲邏輯

        存儲結構與數據文件

存儲結構

database---tablespace-- segment--extent--bloks-- datafile

    tablespace 表空間:

    8.1 表空間分類

        1 永久表空間,指的是建立數據

            system 系統表空間/字典表空間/永久表空間,存儲當前數據庫數據字典的信息。

            oracle 內部的基表也放在永久表空間。好比user_,dba_,all_ 開頭的都在這裏。

            內部使用的工具也放在這裏

            sysaux 輔助表空間,10G 後纔有,主要用來減輕system 表空間的負擔,裏面放oracle內部工具

                v$sysaux_occupants;

        2 undo (回退)表空間 ,處理事物等

            主要存放用戶對數據塊更改前的前鏡像,主要用來作閃會操做或者rollback

        3 臨時表空間,存放臨時數據,好比排序

            temp 表空間,存放用戶的臨時數據,排序的時候也要使用臨時表空間。

            當排序時內存不足的時候,就用到臨時表空間。

        4 用戶表空間

            users/example 用戶表空間,是oracle 內部使用的模板數據庫使用的表空間。工做中用戶表空間須要手動建立。

    8.2 表空間建立

            表空間狀態:online 表示聯機,可讀可寫。

                              offline 離線,表示表空間和實例斷開連接。

                              read write 可讀可寫

                              read only 只讀

            system 表空間,undo ,tmpe 不能夠offline,也不能夠read only。sysaux 不能read only,能夠offline。其餘的用戶表空間隨便哪一個操做均可以;

                alter tablespace sysaux offline

                表空間大小分類:

                          小表表空間:一個表空間下面能夠存放多個數據文件。能夠存放1024個,每個數據文件不能超過32G ,數據文件的頭只佔用4K

                          大表表空間:一個表空間下面只能存放一個數據文件。最大能夠達到128T,最小能夠達到8T,能夠放40億個數據塊,數據文件頭佔4M

                查看錶空間文件的位置:

1* select file_name,tablespace_name from dba_data_files
SQL> /

FILE_NAME				 TABLESPACE_NAME
---------------------------------------- ------------------------------
/u01/product/oradata/orcl/wzl01.dbf	 WZL_TABLESPACE
/u01/product/oradata/orcl/users01.dbf	 USERS
/u01/product/oradata/orcl/undotbs01.dbf  UNDOTBS1
/u01/product/oradata/orcl/sysaux01.dbf	 SYSAUX
/u01/product/oradata/orcl/system01.dbf	 SYSTEM

                create  [smallfile|bigfile] tablespace tablespace_name datafile 'path' size <> [extend uniform size <>|autoextend  on <> segment management local|auto ];

        create tablespace sarah datafile  'path.dbf'  size 50M ;

SQL> create tablespace wzl_tablespace datafile '/u01/product/oradata/orcl/wzl01.dbf' size 50M;

Tablespace created.
# 下面再建一個50M 自動增加的大表空間
SQL> create bigfile tablespace wzl_big_tablespace datafile '/u01/product/oradata/orcl/wzl02.dbf' size 50M autoextend on;

Tablespace created.

        select bigfile,tablespace_name from dba_tablespaces;

SQL> select TABLESPACE_NAME,BLOCK_SIZE,NEXT_EXTENT,STATUS from dba_tablespaces;

TABLESPACE_NAME 	       BLOCK_SIZE NEXT_EXTENT STATUS
------------------------------ ---------- ----------- ---------
SYSTEM				     8192	      ONLINE
SYSAUX				     8192	      ONLINE
UNDOTBS1			     8192	      ONLINE
TEMP				     8192     1048576 ONLINE
USERS				     8192	      ONLINE
WZL_TABLESPACE			     8192	      ONLINE

6 rows selected.

        select tablespace_name,bytes from dba_data_files; 能夠查看錶空間有多大

、SQL> select tablespace_name,bytes from dba_data_files;

TABLESPACE_NAME 		    BYTES
------------------------------ ----------
WZL_TABLESPACE			 52428800
USERS				  5242880
UNDOTBS1			162529280
SYSAUX				639631360
SYSTEM				744488960

 

    alter database default tablespace <> 能夠制定對象默認存放的表空間

SQL> alter database default tablespace WZL_TABLESPACE;

Database altered.
SQL> select tablespace_name,table_name from user_tables;

TABLESPACE_NAME 	       TABLE_NAME
------------------------------ ------------------------------
USERS			       EMPNEW
WZL_TABLESPACE		       TMP_WZL_20161206_1
USERS			       TMP_20161206_2
USERS			       TMP_20161206
USERS			       LEMP
USERS			       TMP1
USERS			       EMP1
USERS			       DEPT1
USERS			       SALGRADE
USERS			       BONUS
USERS			       EMP
# 建表後默認都放在指定的表空間下

 

SQL> select property_name,property_value from database_properties where property_name like '%DEF%';

PROPERTY_NAME	     PROPERTY_VALUE
-------------------- ------------------------------
DEFAULT_TEMP_TABLESP TEMP
ACE

DEFAULT_PERMANENT_TA WZL_TABLESPACE
BLESPACE

DEFAULT_EDITION      ORA$BASE
DEFAULT_TBS_TYPE     SMALLFILE


# 查看默認使用的表空間信息

    8.3 表空間的管理

            8.3.1 表空間的修改

                    只有用戶本身新建的報表空間能夠修改。

                    alter tablespace <> rename to <>;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
WZL_TABLESPACE
WZL_BIG_TABLESPACE

7 rows selected.
SQL> alter tablespace WZL_TABLESPACE rename to WZL_TABLESPACE_tmp;

Tablespace altered.
#表空間更名成功
SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
WZL_TABLESPACE_TMP
WZL_BIG_TABLESPACE

7 rows selected.

    

            8.3.2 表空間下數據庫文件或者表空間的遷移

                    只有用戶建的表空間能夠遷移(磁盤空間已滿),若是表空間不夠又不遷移數據文件中的數據會被清空。

                    1 在open 狀態下遷移

                        不可以離線的都不能夠作遷移操做。

                        總體遷移表空間:

                        第一步:alter tablespace <> offline;

TABLESPACE_NAME 	       STATUS
------------------------------ ---------
SYSTEM			       ONLINE
SYSAUX			       ONLINE
UNDOTBS1		       ONLINE
TEMP			       ONLINE
USERS			       ONLINE
WZL_TABLESPACE_TMP	       ONLINE
WZL_BIG_TABLESPACE	       ONLINE

7 rows selected.
SQL> alter tablespace WZL_TABLESPACE_TMP offline;

Tablespace altered.
# 已經離線

                         第二部:在dba_data_files;裏面能看到數據文件,能夠把它用cp 拷貝走

1* select TABLESPACE_NAME,FILE_NAME from dba_data_files
SQL> /

TABLESPACE_NAME      FILE_NAME
-------------------- ----------------------------------------
WZL_TABLESPACE_TMP   /u01/product/oradata/orcl/wzl01.dbf
WZL_BIG_TABLESPACE   /u01/product/oradata/orcl/wzl02.dbf
USERS		     /u01/product/oradata/orcl/users01.dbf
UNDOTBS1	     /u01/product/oradata/orcl/undotbs01.dbf
SYSAUX		     /u01/product/oradata/orcl/sysaux01.dbf
SYSTEM		     /u01/product/oradata/orcl/system01.dbf
# 下面將數據文件拷貝到其餘地方
SQL> ho cp /u01/product/oradata/orcl/wzl01.dbf /u01/product/oradata/wzl001.dbf

                         第三步:而後在系統中修改:

                        alter tablespasce <> rename datafile 'oldpath'  to 'new_path';

SQL> alter tablespace WZL_TABLESPACE_TMP rename datafile '/u01/product/oradata/orcl/wzl01.dbf' to '/u01/product/oradata/wzl001.dbf';

Tablespace altered.

                        第四步:最後在online 

SQL> select TABLESPACE_NAME,FILE_NAME from dba_data_files;

TABLESPACE_NAME      FILE_NAME
-------------------- ----------------------------------------
WZL_TABLESPACE_TMP   /u01/product/oradata/wzl001.dbf
WZL_BIG_TABLESPACE   /u01/product/oradata/orcl/wzl02.dbf
USERS		     /u01/product/oradata/orcl/users01.dbf
UNDOTBS1	     /u01/product/oradata/orcl/undotbs01.dbf
SYSAUX		     /u01/product/oradata/orcl/sysaux01.dbf
SYSTEM		     /u01/product/oradata/orcl/system01.dbf
SQL> alter tablespace WZL_TABLESPACE_TMP online;

Tablespace altered.
# 表空間上線成功

                          

                    遷移表空間下的某個數據文件:

                         第一步:離線數據文件:

                        alter database datafile 6 offline; oracle 會將數據文件頭部scn號碼鎖住狀態變爲recover

1* select file#,name,status from v$datafile
SQL> /

     FILE# NAME 				    STATUS
---------- ---------------------------------------- -------
	 1 /u01/product/oradata/orcl/system01.dbf   SYSTEM
	 2 /u01/product/oradata/orcl/sysaux01.dbf   ONLINE
	 3 /u01/product/oradata/orcl/undotbs01.dbf  ONLINE
	 4 /u01/product/oradata/orcl/users01.dbf    ONLINE
	 5 /u01/product/oradata/wzl001.dbf	    ONLINE
	 6 /u01/product/oradata/orcl/wzl02.dbf	    ONLINE
# 下面數據文件被離線,狀態改成recoer
SQL> select a.tablespace_name,a.file_name,a.bytes,b.status  from dba_data_files a,v$datafile b where a.file_name = b.name;

TABLESPACE_NAME      FILE_NAME					   BYTES STATUS
-------------------- ---------------------------------------- ---------- -------
WZL_TABLESPACE_TMP   /u01/product/oradata/wzl001.dbf			 RECOVER
WZL_BIG_TABLESPACE   /u01/product/oradata/orcl/wzl02.dbf	52428800 ONLINE
USERS		     /u01/product/oradata/orcl/users01.dbf	 5242880 ONLINE
UNDOTBS1	     /u01/product/oradata/orcl/undotbs01.dbf   162529280 ONLINE
SYSAUX		     /u01/product/oradata/orcl/sysaux01.dbf    639631360 ONLINE
SYSTEM		     /u01/product/oradata/orcl/system01.dbf    744488960 SYSTEM
WZL_TABLESPACE_TMP   /u01/product/oradata/wzl002.dbf		52428800 ONLINE

                            第二步:物理文件拷貝走

[root@wangzilong orcl]# ll wzl001.dbf
-rw-r----- 1 root root 62922752 Dec  7 11:43 wzl001.dbf
[root@wangzilong orcl]# pwd
/u01/product/oradata/orcl

                             第三步:修改系統數據

                            alter database rename file 'oldpath' to 'newpath';

SQL> alter database rename file '/u01/product/oradata/wzl001.dbf' to '/u01/product/oradata/orcl/wzl001.dbf';

Database altered.

                            第四步: 恢復數據文件

                            recover datafile 5;

SQL> recover datafile 5;
Media recovery complete.
SQL> select file#,name,status from v$datafile;

     FILE# NAME 				    STATUS
---------- ---------------------------------------- -------
	 1 /u01/product/oradata/orcl/system01.dbf   SYSTEM
	 2 /u01/product/oradata/orcl/sysaux01.dbf   ONLINE
	 3 /u01/product/oradata/orcl/undotbs01.dbf  ONLINE
	 4 /u01/product/oradata/orcl/users01.dbf    ONLINE
	 5 /u01/product/oradata/orcl/wzl001.dbf     OFFLINE
	 6 /u01/product/oradata/orcl/wzl02.dbf	    ONLINE
	 7 /u01/product/oradata/wzl002.dbf	    ONLINE

7 rows selected.
# 數據文件5 已經恢復成功。狀態從recoer 變爲 offline

                            第五步:online 聯機數據文件

                            alter database datafile 6 online;

SQL> alter database datafile '/u01/product/oradata/orcl/wzl001.dbf' online;

Database altered.

SQL> select file#,name,status from v$datafile;

     FILE# NAME 				    STATUS
---------- ---------------------------------------- -------
	 1 /u01/product/oradata/orcl/system01.dbf   SYSTEM
	 2 /u01/product/oradata/orcl/sysaux01.dbf   ONLINE
	 3 /u01/product/oradata/orcl/undotbs01.dbf  ONLINE
	 4 /u01/product/oradata/orcl/users01.dbf    ONLINE
	 5 /u01/product/oradata/orcl/wzl001.dbf     ONLINE
	 6 /u01/product/oradata/orcl/wzl02.dbf	    ONLINE
	 7 /u01/product/oradata/wzl002.dbf	    ONLINE

7 rows selected.
# 數據文件5 已經上線成功

        注意:在非歸檔模式下是不能夠對錶空間裏面的某個數據文件下線的。用archive log list 查看是不是歸檔,若是是非歸檔,則設置爲歸檔。若是設置歸檔失敗,則須要恢復數據庫recover database。而後關閉數據庫,重啓數據庫到mount 狀態下,這個時候設置歸檔alter database archivelog 就會成功,而後再繼續對錶空間中的數控文件下線就沒有問題

                    2 在mount 狀態下遷移(工做中不建議使用)

 

                            第一步:把文件拷貝走

                            第二步:修改系統中文件的路徑

                            alter database rename file ‘oldpath' to 'newpath';      

                            第三步:打開數據庫alter database open;             

            8.3.3 表空間的擴容

                    表空間的使用率達到85%以上須要擴容

                    desc dba_data_files; 裏面能看到總的大小

SQL> select tablespace_name,bytes/1024/1024 from dba_data_files;

TABLESPACE_NAME      BYTES/1024/1024
-------------------- ---------------
WZL_TABLESPACE_TMP		  50
WZL_BIG_TABLESPACE		  50
USERS				   5
UNDOTBS1			 155
SYSAUX				 610
SYSTEM				 710

                      desc dba_free_space 裏面能看到剩餘表空間

SQL> select tablespace_name,bytes/1024/1024 from dba_free_space where tablespace_name = 'WZL_TABLESPACE_TMP';

TABLESPACE_NAME      BYTES/1024/1024
-------------------- ---------------
WZL_TABLESPACE_TMP	     48.9375

                    上面表空間和剩餘空間能夠計算除表空間的使用率

SQL> select a.tablespace_name,a.bytes/1024/1024 total_space,b.bytes/1024/1024 free_space,(a.bytes/1024/1024-b.bytes/1024/1024)/a.bytes/1024/1024 use_l from dba_data_files a,dba_free_space b where a.tablespace_name = b.tablespace_name and  a.tablespace_name = 'WZL_TABLESPACE_TMP';

TABLESPACE_NAME      TOTAL_SPACE FREE_SPACE	 USE_L
-------------------- ----------- ---------- ----------
WZL_TABLESPACE_TMP	      50    48.9375 1.9327E-14

                  

                     8.3.3.1 修改表空間爲自動增加(以後只須要關注磁盤就能夠了) autoextend on

                       dba_data_file.autoextensible 表示是不是自動增加

                        alter database  <> datafile 'oldpath' autoextend on;

SQL> select tablespace_name,AUTOEXTENSIBLE,file_name from dba_data_files;

TABLESPACE_NAME      AUT FILE_NAME
-------------------- --- ----------------------------------------
WZL_TABLESPACE_TMP   NO  /u01/product/oradata/wzl001.dbf
WZL_BIG_TABLESPACE   YES /u01/product/oradata/orcl/wzl02.dbf
USERS		     YES /u01/product/oradata/orcl/users01.dbf
UNDOTBS1	     YES /u01/product/oradata/orcl/undotbs01.dbf
SYSAUX		     YES /u01/product/oradata/orcl/sysaux01.dbf
SYSTEM		     YES /u01/product/oradata/orcl/system01.dbf

6 rows selected.
# 表空間WZL_TABLESPACE_TMP 不自動增加
SQL> alter database datafile '/u01/product/oradata/wzl001.dbf' autoextend on;

Database altered.
# 設置自動增加成功
SQL> select tablespace_name,AUTOEXTENSIBLE,file_name from dba_data_files;

TABLESPACE_NAME      AUT FILE_NAME
-------------------- --- ----------------------------------------
WZL_TABLESPACE_TMP   YES /u01/product/oradata/wzl001.dbf
WZL_BIG_TABLESPACE   YES /u01/product/oradata/orcl/wzl02.dbf
USERS		     YES /u01/product/oradata/orcl/users01.dbf
UNDOTBS1	     YES /u01/product/oradata/orcl/undotbs01.dbf
SYSAUX		     YES /u01/product/oradata/orcl/sysaux01.dbf
SYSTEM		     YES /u01/product/oradata/orcl/system01.dbf

6 rows selected.

                      8.3.3.2 從新修改表空間大小

                        alter database datafile ‘path’ resize 60M;

SQL> alter database datafile '/u01/product/oradata/wzl001.dbf' resize 60M;

Database altered.
# 增長到60M 
SQL> select tablespace_name,AUTOEXTENSIBLE,file_name,bytes from dba_data_files;

TABLESPACE_NAME      AUT FILE_NAME				       BYTES
-------------------- --- ---------------------------------------- ----------
WZL_TABLESPACE_TMP   YES /u01/product/oradata/wzl001.dbf	    62914560
WZL_BIG_TABLESPACE   YES /u01/product/oradata/orcl/wzl02.dbf	    52428800
USERS		     YES /u01/product/oradata/orcl/users01.dbf	     5242880
UNDOTBS1	     YES /u01/product/oradata/orcl/undotbs01.dbf   162529280
SYSAUX		     YES /u01/product/oradata/orcl/sysaux01.dbf    639631360
SYSTEM		     YES /u01/product/oradata/orcl/system01.dbf    744488960

6 rows selected.
# 修改表空間大小成功

                      8.3.3.3 給表空間下增長數據文件

                        alter tablespace <> add datafile 'newpath' size 50M;

                        建議增長的數據文件放在不一樣的磁盤,利於IO 訪問,利於數據庫安全

SQL> alter tablespace WZL_TABLESPACE_TMP add datafile '/u01/product/oradata/wzl002.dbf' size 50M;

Tablespace altered.
SQL> select tablespace_name,AUTOEXTENSIBLE,file_name,bytes from dba_data_files;

TABLESPACE_NAME      AUT FILE_NAME				       BYTES
-------------------- --- ---------------------------------------- ----------
WZL_TABLESPACE_TMP   YES /u01/product/oradata/wzl001.dbf	    62914560
WZL_BIG_TABLESPACE   YES /u01/product/oradata/orcl/wzl02.dbf	    52428800
USERS		     YES /u01/product/oradata/orcl/users01.dbf	     5242880
UNDOTBS1	     YES /u01/product/oradata/orcl/undotbs01.dbf   162529280
SYSAUX		     YES /u01/product/oradata/orcl/sysaux01.dbf    639631360
SYSTEM		     YES /u01/product/oradata/orcl/system01.dbf    744488960
WZL_TABLESPACE_TMP   NO  /u01/product/oradata/wzl002.dbf	    52428800

7 rows selected.
# 上面表空間WZL_TABLESPACE_TMP 中添加列一個數據文件

            8.3.4 表空間的刪除

                    表空間下沒有對象能夠這麼刪除  drop tablespasce <> ;

                    表空間下的對象也同時刪除 drop tablespace <> including contents;

                    可是上面兩種方法不會刪除物理文件。

                     drop tablespace <> including contents and datafiles; 刪除表空間,刪除表空間裏面的對象,刪除物理文件。

            8.3.5 表空間視圖的查詢

                        dba_tablespaces :查詢全部的表空間有那些

                        dba_data_files; dba_free_space ; 查詢表空間下大小。

                        v$tablespace; 也能夠看到,表空間的信息。是動態的。

    8.4 undo 表空間

            8.4.1 做用

                8.4.1.1 回退操做

                8.4.1.2 閃回操做

                8.4.1.3 一致性

           8.4.2 建立

                undo 表空間出問題了須要建立表空間,並設置爲默認的undo

                create undo tablespace <> datafile 'path' size <> autoextend on;

                工做中須要undo 表空間建立爲自動增加的表空間。

SQL> create undo tablespace undowzl1 datafile '/u01/product/oradata/orcl/undowzl1.dbf' size 100M autoextend on;

Tablespace created.
# undo 表空間已經建立成功
SQL> select tablespace_name,contents from dba_tablespaces;

TABLESPACE_NAME      CONTENTS
-------------------- ---------
SYSTEM		     PERMANENT
SYSAUX		     PERMANENT
UNDOTBS1	     UNDO
TEMP		     TEMPORARY
USERS		     PERMANENT
WZL_TABLESPACE_TMP   PERMANENT
WZL_BIG_TABLESPACE   PERMANENT
UNDOWZL1	     UNDO

8 rows selected.
SQL> select tablespace_name,segment_name from dba_rollback_segs where tablespace_name like 'UNDOW%';

TABLESPACE_NAME      SEGMENT_NAME
-------------------- ------------------------------
UNDOWZL1	     _SYSSMU11_1766216107$
UNDOWZL1	     _SYSSMU12_2229279369$
UNDOWZL1	     _SYSSMU13_1058550138$
UNDOWZL1	     _SYSSMU14_3194392635$
UNDOWZL1	     _SYSSMU15_2910016055$
UNDOWZL1	     _SYSSMU16_3978893589$
UNDOWZL1	     _SYSSMU17_3298471941$
UNDOWZL1	     _SYSSMU18_485156876$
UNDOWZL1	     _SYSSMU19_1750812237$
UNDOWZL1	     _SYSSMU20_3915053547$

10 rows selected.
# 本身新建的表空間默認也是10個段

       設置爲默認undo 表空間

        alter system set undo_tablespace = undowzl1 scope=spfile;

SQL> alter system set undo_tablespace=UNDOWZL1;

System altered.

        

1* select tablespace_name,segment_name,status from dba_rollback_segs where tablespace_name like 'UNDOT%'
SQL> /

TABLESPACE_NAME      SEGMENT_NAME		    STATUS
-------------------- ------------------------------ ----------------
UNDOTBS1	     _SYSSMU1_1240252155$	    OFFLINE
UNDOTBS1	     _SYSSMU2_111974964$	    OFFLINE
UNDOTBS1	     _SYSSMU3_4004931649$	    OFFLINE
UNDOTBS1	     _SYSSMU4_1126976075$	    OFFLINE
UNDOTBS1	     _SYSSMU5_4011504098$	    OFFLINE
UNDOTBS1	     _SYSSMU6_3654194381$	    OFFLINE
UNDOTBS1	     _SYSSMU7_4222772309$	    OFFLINE
UNDOTBS1	     _SYSSMU8_3612859353$	    OFFLINE
UNDOTBS1	     _SYSSMU9_3945653786$	    OFFLINE
UNDOTBS1	     _SYSSMU10_3271578125$	    OFFLINE

10 rows selected.
# offline 表示不使用

          8.4.3 查看undo 表空間

                查看當前使用的undo表空間是哪個,大小是多大

                show parameter undo_

SQL> show parameter undo_;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
undo_management 		     string	 AUTO   # 自動|手動管理方式
undo_retention			     integer	 900    #事物操做在保持時間
undo_tablespace 		     string	 UNDOTBS1 # undo 表空間名稱

                查看當前系統使用的默認的永久undo 表空間

        8.4.4 undo 的管理

                9i 叫回退段 rollback segment

                10g 的時候有rollback segment 和undo

                aum:auto undo management 自動管理

                mum:manual undo management 手動管理

                11g:undo 若是設置爲手動管理,普通用戶就不能夠作DML 操做,sys 能夠作。

                10個段

SQL> select tablespace_name,segment_name from dba_rollback_segs where tablespace_name like 'UNDO%';

TABLESPACE_NAME      SEGMENT_NAME
-------------------- ------------------------------
UNDOTBS1	     _SYSSMU1_1240252155$
UNDOTBS1	     _SYSSMU2_111974964$
UNDOTBS1	     _SYSSMU3_4004931649$
UNDOTBS1	     _SYSSMU4_1126976075$
UNDOTBS1	     _SYSSMU5_4011504098$
UNDOTBS1	     _SYSSMU6_3654194381$
UNDOTBS1	     _SYSSMU7_4222772309$
UNDOTBS1	     _SYSSMU8_3612859353$
UNDOTBS1	     _SYSSMU9_3945653786$
UNDOTBS1	     _SYSSMU10_3271578125$

10 rows selected.

                         默認undo100M 大小。

SQL> select tablespace_name,bytes/1024/1024 bytes from dba_data_files where tablespace_name like 'UNDO%';

TABLESPACE_NAME 	  BYTES
-------------------- ----------
UNDOTBS1		    155

                刪除undo :

                undo 默認是不能夠offline,不能夠刪除。若是要刪除,能夠設置爲手動不要自動管理,重啓狀態就能夠看到是offline 不使用,這個時候就能夠刪除了

SQL> alter system set undo_management=manual scope=spfile;

System altered.
# 修改成手動
SQL> show parameter undo_;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
undo_management 		     string	 MANUAL
undo_retention			     integer	 900
undo_tablespace 		     string	 UNDOWZL1
# 已經改不不自動了
SQL> select tablespace_name,status from dba_rollback_segs where tablespace_name='UNDOWZL1';

TABLESPACE_NAME      STATUS
-------------------- ----------------
UNDOWZL1	     OFFLINE
UNDOWZL1	     OFFLINE
UNDOWZL1	     OFFLINE
UNDOWZL1	     OFFLINE
UNDOWZL1	     OFFLINE
UNDOWZL1	     OFFLINE
UNDOWZL1	     OFFLINE
UNDOWZL1	     OFFLINE
UNDOWZL1	     OFFLINE
UNDOWZL1	     OFFLINE
# 這個時候能夠刪除了
SQL> drop tablespace UNDOWZL1;

Tablespace dropped.
# 再在mount條件下修改默認使用undo 表空間
  1* alter system set undo_tablespace=undotbs1 scope=spfile
SQL> /

System altered.
# 在重啓數據庫
SQL> startup force;
ORACLE instance started.

Total System Global Area 2438529024 bytes
Fixed Size		    2230792 bytes
Variable Size		  570426872 bytes
Database Buffers	 1845493760 bytes
Redo Buffers		   20377600 bytes
Database mounted.
Database opened.
SQL> show parameter undo_

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
undo_management 		     string	 AUTO
undo_retention			     integer	 900
undo_tablespace 		     string	 UNDOTBS1

           

若是undo 表空間中有內容丟失如何處理:

    1 shutdown immediate;

    2 修改undo 管理方式爲手動

        alter system set undo_management=manual scope=spfile;

SQL> show parameter undo_;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
undo_management 		     string	 MANUAL
undo_retention			     integer	 900
undo_tablespace 		     string	 UNDOTBS1
# 已經設置爲手動

    3 重啓數據庫

        shutdown immediate;

         startup mount;

    4 將數據文件離線

        alter database datafile <> offline  drop;

SQL> alter database datafile '/u01/product/oradata/orcl/undotbs01.dbf' offline drop;

Database altered.
# 已經刪除了undo 表空間

    5 打開數據庫

        alter database open;

    6 刪除丟失的undo 表空間

        drop tablespace undotbs;

SQL> drop tablespace UNDOTBS1;

Tablespace dropped.

    7 新建一個undo 設爲默認的

        create undo tablespace undotbs2 autoextend on;

SQL> create undo tablespace undotbs2 datafile '/u01/product/oradata/orcl/undotbs02.dbf' size 50M autoextend on;

Tablespace created.

        alter system set undo_tablespace=undotbs2;

SQL> alter system set undo_tablespace=undotbs2 scope=spfile;

System altered.

      注意:因爲以前爲了刪除undo 表空間修改管理模式爲嗎怒阿里手動,這個時候系統不會使用undo 表空間了才能夠刪除。可是若是本身新建了新的表空間順便設置爲默認的undo 表空間的時候會報錯說只能在auto模式下設置,可是當咱們在mount模式下修改成auto的時候 數據庫又沒法open,因此沒法將新建的undo設置爲默認undo表空間,會陷入死循環的尷尬,這個時候須要從新設置爲手動,而後在修改成默認表空間的語句後面加上 scope=spfile,就行了,最後在重啓到mount 模式喜好修改成auto 就能夠open。

        8 把undo 的管理設置爲自動管理

        alter system set undo_management=auto scpoe=spfile;

SQL> alter system set undo_management=auto scope=spfile;

System altered.

         startup force;

SQL> show parameter undo_;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
undo_management 		     string	 AUTO
undo_retention			     integer	 900
undo_tablespace 		     string	 UNDOTBS2

    若是6刪除不成功

    7 建立隱藏除數文件

        create pfile= ‘path' from spfile;

    8 加隱藏參數過濾活動的undo 段

        select segment_name from dba_rollback_segs where tablespace_name = '';

        查到活動的undo 段用vi 添加到上面建立的pfile 中:

        添加:corrupted_rollback=segments=('',''^)

    9 使用pfile 啓動數據庫

        startup pfile=‘path’;

    10 刪除undotbs1;

     drop tablespace undotbs1 including conents and datafiles;

     從新建立一個undo 並設置爲自動管理,且設置爲默認 undo 文件重啓數據庫就能夠了。

    8.4.5 undo 表空間的擴容

            有三種方法

        1 將undo 表空間下數據文件改成autoextend on

            alter database datafile 'path' autoextend on;

        2 將undo 表空間下的數據文件大小從新設置resize

            alter database datafile 'path' resize <>;

        3 給undo表空間增長愛數據文件

            alter tablespace <> add datafile 'path' size <> ;

   8.5 臨時表空間temp

           1 臨時表空間的做用

                a:存放臨時文件

                b:排序內存不夠用的時候是使用臨時表空間

               select tablespace_name from database_properties;

                desc dba_temp_files;能看到臨時表空間的詳細信息。

1* select TABLESPACE_NAME,FILE_NAME from dba_temp_files
SQL> /

TABLESPACE_NAME      FILE_NAME
-------------------- --------------------------------------------------
TEMP		     /u01/product/oradata/orcl/temp01.dbf

           2 臨時表空間的建立

                create tmporary tablespace <> tempfile 'path' size <>;

SQL> create temporary tablespace tempwzl1 tempfile '/u01/product/oradata/orcl/tempwzl01.dbf' size 20M;

Tablespace created.

           3 臨時表空間的管理

                擴容有三種方法:改成自動增加,修改大小,添加數據文件

           4 臨時表空間丟失如何處理

                11g -- 中臨時表空間丟失只須要重啓就能夠了。或者建立一個臨時表空間並設置爲默認就能夠了。

                alter database default temporary tablespace <>;

                dba_temp_files;

SQL> alter database default temporary tablespace tempwzl1;

Database altered.
SQL> select tablespace_name,file_name from dba_temp_files;

TABLESPACE_NAME      FILE_NAME
-------------------- --------------------------------------------------
TEMP		     /u01/product/oradata/orcl/temp01.dbf
TEMPWZL1	     /u01/product/oradata/orcl/tempwzl01.dbf

# 下面能夠看到默認的臨時表空間已經修改了
  1* select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'
SQL> /

PROPERTY_NAME		       PROPERTY_VALUE
------------------------------ ----------------------------------------
DEFAULT_TEMP_TABLESPACE        TEMPWZL1
相關文章
相關標籤/搜索