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
相关文章
相关标签/搜索