浏览存储结构
常规的意义上来说 一个段就是一个表 严格意义来说分区表可以有多个段
11g 创建表空间 优先推荐locality managed
创建表空间有三种类型:
permanent(进去的数据就会一直存在,除非把它删掉)
temporary(临时,只要数据库一关闭,temp里的数据就会被清空,用来做排序,做表连接的中间结果)
undo(undo的数据必须存放在自己专用的表空间下,文件的结构格式和普通的不一样)
undo 在事物开始,数据没有被修改之前都会放在undo里。事物没有结束,undo绝对有,事物结束,尽量不会被回收,undo——retention参数 保留一定的时间
snapshot too old 没有剩余空间可以用了,就会被删。
对于undo 加一个guarantee 会强制保留
想在空间的级别上更省空间就选Automatic 从性能来说就选unform
添加数据文件有两种方法:一种是ASM,还有一种是文件系统
区分配:动态的分配灵活的大小
空间和性能不可兼得
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/system.267.985112183
+DATA/orcl/datafile/sysaux.268.985112183
+DATA/orcl/datafile/undotbs1.269.985112183
+DATA/orcl/datafile/users.270.985112183
+DATA/orcl/datafile/example.276.985112295
+DATA/orcl/datafile/tbs_16k.dbf
6 rows selected.
SQL> create tablespace test datafile '+DATA/orcl/datafile/test01.dbf' size 10m autoextend on next 1m; 指定的数据文件,大小10M,下次分配1M
Tablespace created.
SQL> set long 1000
SQL> set pages 1000
SQL> set line 120
SQL> select dbms_metadata.get_ddl('TABLESPACE','TEST') from dual;
DBMS_METADATA.GET_DDL('TABLESPACE','TEST')
--------------------------------------------------------------------------------
CREATE TABLESPACE "TEST" DATAFILE
'+DATA/orcl/datafile/test01.dbf' SIZE 10485760
AUTOEXTEND ON NEXT 1048576 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT NOCOMPRESS SEGMENT SPACE MANAGEM
ENT AUTO
创建表空间:
格式: create tablespace 表间名 datafile '数据文件名' size 表空间大小
create tablespace data_test datafile 'e:\oracle\oradata\test\data_1.dbf' size 2000M;
create tablespace idx_test datafile 'e:\oracle\oradata\test\idx_1.dbf' size 2000M;
(*数据文件名 包含全路径, 表空间大小 2000M 表是 2000兆)
创建表:
SQL> create table tttt as select * from scott.emp;
Table created.
SQL> create table rrrr as select * from scott.emp;
Table created.
SQL> desc dba_extents
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
OWNER VARCHAR2(30)
SEGMENT_NAME VARCHAR2(81)
PARTITION_NAME VARCHAR2(30)
SEGMENT_TYPE VARCHAR2(18)
TABLESPACE_NAME VARCHAR2(30)
EXTENT_ID NUMBER
FILE_ID NUMBER
BLOCK_ID NUMBER
BYTES NUMBER
BLOCKS NUMBER
RELATIVE_FNO NUMBER
SQL> SELECT SEGMENT_NAME,FILE_ID,EXTENT_ID,BLOCK_ID,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME IN('TTTT','RRRR');
SEGMENT_NAME FILE_ID EXTENT_ID BLOCK_ID
--------------------------------------------------------------------------------- ---------- ---------- ----------
BLOCKS
----------
TTTT 1 0 87320
8
RRRR 1 0 87328
8
SQL> COL SEGMENT_NAME FOR A20
SQL> /
SEGMENT_NAME FILE_ID EXTENT_ID BLOCK_ID BLOCKS
-------------------- ---------- ---------- ---------- ----------
TTTT 1 0 87320 8
SQL> TRUNCATE TABLE TTTT;
Table truncated.
SQL> TRUNCATE TABLE RRRR;
Table truncated.
只有truncated 可以把空间回收
使用alllocate 分配回收空间
SQL> ALTER TABLE TTTT ALLOCATE EXTENT;
Table altered.
SQL> SELECT SEGMENT_NAME,FILE_ID,EXTENT_ID,BLOCK_ID,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME IN('TTTT','RRRR');
SEGMENT_NAME FILE_ID EXTENT_ID BLOCK_ID BLOCKS
-------------------- ---------- ---------- ---------- ----------
TTTT 1 0 87320 8
TTTT 1 1 87336 8
RRRR 1 0 87328 8
SQL> ALTER TABLE TTTT DEALLOCATE UNUSED;
Table altered.
SQL> SELECT SEGMENT_NAME,FILE_ID,EXTENT_ID,BLOCK_ID,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME IN('TTTT','RRRR');
SEGMENT_NAME FILE_ID EXTENT_ID BLOCK_ID BLOCKS
-------------------- ---------- ---------- ---------- ----------
TTTT 1 0 87320 8
RRRR 1 0 87328 8
SQL> desc dba_data_files 每个数据文件的信息
Name Null? Type
----------------------------------------- -------- ----------------------------
FILE_NAME VARCHAR2(513)
FILE_ID NUMBER
TABLESPACE_NAME VARCHAR2(30)
BYTES NUMBER
BLOCKS NUMBER
STATUS VARCHAR2(9)
RELATIVE_FNO NUMBER
AUTOEXTENSIBLE VARCHAR2(3)
MAXBYTES NUMBER
MAXBLOCKS NUMBER
INCREMENT_BY NUMBER
USER_BYTES NUMBER
USER_BLOCKS NUMBER
ONLINE_STATUS VARCHAR2(7)
SQL> desc dba_tablespaces 表空间的信息
Name Null? Type
----------------------------------------- -------- ----------------------------
TABLESPACE_NAME NOT NULL VARCHAR2(30)
BLOCK_SIZE NOT NULL NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NOT NULL NUMBER
MAX_EXTENTS NUMBER
MAX_SIZE NUMBER
PCT_INCREASE NUMBER
MIN_EXTLEN NUMBER
STATUS VARCHAR2(9)
CONTENTS VARCHAR2(9)
LOGGING VARCHAR2(9)
FORCE_LOGGING VARCHAR2(3)
EXTENT_MANAGEMENT VARCHAR2(10)
ALLOCATION_TYPE VARCHAR2(9)
PLUGGED_IN VARCHAR2(3)
SEGMENT_SPACE_MANAGEMENT VARCHAR2(6)
DEF_TAB_COMPRESSION VARCHAR2(8)
RETENTION VARCHAR2(11)
BIGFILE VARCHAR2(3)
PREDICATE_EVALUATION VARCHAR2(7)
ENCRYPTED VARCHAR2(3)
COMPRESS_FOR VARCHAR2(12)
SQL> alter system set db_create_file_dest='/u01/app/oracle/oradata/orcl';
System altered. 把创建文件自动放在这里
扩大数据库
创建新表空间,将数据文件添加到现有表空间,增加数据文件大小,动态扩展数据文件
alter database datafile '路径' resize 20m; 改变数据文件大小