Oracle表空间

表空间

物理结构上 : 数据信息存储在数据文件中
逻辑结构上: 数据信息存储在表空间中

一个数据库是由多个表空间构成,表空间和数据文件存在紧密的对应关系
每个表空间是由一个或多个数据文件组成

一个实例对应一个数据库
一个表空间可以对应多个用户, 一个用户只能属于一个表空间
数据库下可以创建多个表空间,一个java项目对应一个表空间

dba_tablespace_name ,存储Oracle数据库中的所有表空间信息

SQL> select tablespace_name, block_size,allocation_type from dba_tablespaces;

TABLESPACE_NAME BLOCK_SIZE ALLOCATIO


SYSTEM 8192 SYSTEM
SYSAUX 8192 SYSTEM
UNDOTBS1 8192 SYSTEM
TEMP 8192 UNIFORM
USERS 8192 SYSTEM
EXAMPLE 8192 SYSTEM

创建基本表空间

在创建表空间的时候: 
  1. 在数据字典和控件文件中添加新建的表空间信息
   2. 操作系统中,创建指定大小的操作系统文件,并作为与表空间对应的数据文件
使用脚本创建
  create [temporary|undo] tablespace tablespace_name
  datafile filepath
  blocksize number k
   autoallocate number [k|m]

SQL> create tablespace hnkj
2 datafile 'g:\DB_file\hnkj.dbf'
3 size 10m
4 autoextend on
5 maxsize unlimited;

表空间已创建。
修改表空间

  1. 为表空间增加新的数据文件
    SQL> alter tablespace hnkj
    2 add datafile 'd:\db_file\hnkj_02.dbf'
    3 size 10m;

     表空间已更改。
    
  2. 查询数据文件信息
    SQL> select file_id,file_name,bytes from dba_data_files;

    FILE_ID FILE_NAME                                               BYTES
    

          4 D:\APP\LINNE\ORADATA\ORCL\USERS01.DBF                 5242880
          3 D:\APP\LINNE\ORADATA\ORCL\UNDOTBS01.DBF             104857600
          2 D:\APP\LINNE\ORADATA\ORCL\SYSAUX01.DBF              534773760
          1 D:\APP\LINNE\ORADATA\ORCL\SYSTEM01.DBF              713031680
          5 D:\APP\LINNE\ORADATA\ORCL\EXAMPLE01.DBF             104857600
          6 D:\DB_FILE\HNKJ.DBF                                  10485760
          7 D:\DB_FILE\HNKJ_02.DBF                               10485760
    

    已选择7行。

  3. 修改数据文件大小
    SQL> alter database datafile 'd:\db_file\hnkj_02.dbf' resize 5m;

    数据库已更改。

    SQL> select file_id,file_name,bytes from dba_data_files;

    FILE_ID FILE_NAME                                               BYTES
    

          4 D:\APP\LINNE\ORADATA\ORCL\USERS01.DBF                 5242880
          3 D:\APP\LINNE\ORADATA\ORCL\UNDOTBS01.DBF             104857600
          2 D:\APP\LINNE\ORADATA\ORCL\SYSAUX01.DBF              534773760
          1 D:\APP\LINNE\ORADATA\ORCL\SYSTEM01.DBF              713031680
          5 D:\APP\LINNE\ORADATA\ORCL\EXAMPLE01.DBF             104857600
          6 D:\DB_FILE\HNKJ.DBF                                  10485760
          7 D:\DB_FILE\HNKJ_02.DBF                                5242880
    

    已选择7行。

  4. 修改数据文件是自动增长
    SQL> alter database datafile 'D:\DB_FILE\HNKJ_02.DBF' autoextend on;

数据库已更改。

SQL> select file_id,file_name,autoextensible from dba_data_files;

   FILE_ID FILE_NAME                                          AUT
---------- -------------------------------------------------- ---
         4 D:\APP\LINNE\ORADATA\ORCL\USERS01.DBF              YES
         3 D:\APP\LINNE\ORADATA\ORCL\UNDOTBS01.DBF            YES
         2 D:\APP\LINNE\ORADATA\ORCL\SYSAUX01.DBF             YES
         1 D:\APP\LINNE\ORADATA\ORCL\SYSTEM01.DBF             YES
         5 D:\APP\LINNE\ORADATA\ORCL\EXAMPLE01.DBF            YES
         6 D:\DB_FILE\HNKJ.DBF                                YES
         7 D:\DB_FILE\HNKJ_02.DBF                             YES

已选择7行。

修改表空间状态
正常状态 : online(在线),read write(读写)
非正常状态 : offline(离线),read only(只读)
移动数据文件
1. 修改表空间状态为offline状态,防止其他用户操作
alter tablespace hnkj offline;
SQL> select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
SYSAUX                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
USERS                          ONLINE
EXAMPLE                        ONLINE
HNKJ                           OFFLINE
  1. 复制数据文件到另一个磁盘

  2. 使用 alter tablespace rename 语句修改数据文件名称

     SQL> alter tablespace hnkj
     2  rename datafile 'd:\db_file\hnkj.dbf'
     3  to
     4  'd:\db\hnkj.dbf';
    

表空间已更改。

  SQL> alter tablespace hnkj
  2  rename datafile 'd:\db_file\hnkj_02.dbf'
  3  to
  4  'd:\db\hnkj_02.dbf';

  表空间已更改。

SQL> select file_id,file_name,bytes from dba_data_files;

   FILE_ID FILE_NAME                                               BYTES
---------- -------------------------------------------------- ----------
         4 D:\APP\LINNE\ORADATA\ORCL\USERS01.DBF                 5242880
         3 D:\APP\LINNE\ORADATA\ORCL\UNDOTBS01.DBF             104857600
         2 D:\APP\LINNE\ORADATA\ORCL\SYSAUX01.DBF              534773760
         1 D:\APP\LINNE\ORADATA\ORCL\SYSTEM01.DBF              713031680
         5 D:\APP\LINNE\ORADATA\ORCL\EXAMPLE01.DBF             104857600
         6 D:\DB\HNKJ.DBF
         7 D:\DB\HNKJ_02.DBF

已选择7行。
  1. 将表空间的状态修改为onlin
    SQL> alter tablespace hnkj online;
表空间已更改。

SQL> select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
SYSAUX                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
USERS                          ONLINE
EXAMPLE                        ONLINE
HNKJ                           ONLINE

已选择7行。

删除表空间

drop tablespace tablespace_name [including contents] | [including contents and datafiles]

including contents : 表示删除表空间,但是保留该表空间的数据文件(即使保留其数据文件,这些文件也无法使用)

including contents and datafiles : 删除表空间,将内容全部和数据文件全部删除

SQL> drop tablespace hnkj including contents and datafiles;

表空间已删除。

filename 字段最多允许占用50个字符
SQL> column file_name format a50

临时表空间

临时表空间主要用来为排序或者汇总等操作提供的临时工作空间
create temporary tablespace temp
tempfile 'page.temp.dbf'
size 10m
autoentend on
next 10m maxsize 200m
临时表空间用于存储临时数据,不能够存储永久性数据

撤销表空间

控制文件和日志文件

控制文件 ,是一个很小的二进制文件, 用于描述数据块物理结构,包括数据库文件和日志文件的信息
1. 数据库名和标识
2. 数据库创建的时间戳
3. 表空间的名称
4. 数据文件和日志文件的位置
5. 当前日志文件的序列号

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
D:\APP\LINNE\ORADATA\ORCL\SYSTEM01.DBF
D:\APP\LINNE\ORADATA\ORCL\SYSAUX01.DBF
D:\APP\LINNE\ORADATA\ORCL\UNDOTBS01.DBF
D:\APP\LINNE\ORADATA\ORCL\USERS01.DBF
D:\APP\LINNE\ORADATA\ORCL\EXAMPLE01.DBF

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
D:\APP\LINNE\ORADATA\ORCL\REDO03.LOG
D:\APP\LINNE\ORADATA\ORCL\REDO02.LOG
D:\APP\LINNE\ORADATA\ORCL\REDO01.LOG

SQL> select name from v$controlfile
2 ;

NAME
--------------------------------------------------------------------------------
D:\APP\LINNE\ORADATA\ORCL\CONTROL01.CTL
D:\APP\LINNE\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL

你可能感兴趣的:(Oracle表空间)