本文章为网络笔记,看了warehouse老师的视频受益匪浅,更是感觉自己技术太过初级,特写了本笔记,方便以后反复学习!
如有任何不妥,请发邮件至102448567@qq.com删除文章!
关于warehouse:
http://blog.itpub.net/19602/viewspace-1059211/
11gR2视频第四版 2_04_db_logical_structure1
tablespace
表空间在逻辑上把数据库分成了五部分,每一个表空间就是一部分
一个表空间对应着一个数据文件,temp
表空间对应的文件是临时文件
表空间有三类:永久表空间,undo
表空间,临时表空间
SQL> create tablespace test datafile '/u01/app/oradata/prod/test01.dbf' size 5M PERMANENT;
Tablespace created.
PERMANENT
:永久的(可以省略)
把这个表的数据放在test
表空间里
QL> create table tt(id int,name varchar2(10)) tablespace test;
Table created.
查看一个表空间里有哪些段,也就是有哪些对象
metadata
:元数据
data
:数据
描述数据的数据叫做元数据
下面这些就叫元数据
SQL> desc tt;
Name Null? Type
------------------------------- -------- ----------------------------
ID NUMBER(38)
NAME VARCHAR2(10)
下面是数据
SQL> insert into tt values(1,'a');
1 row created.
SQL> insert into tt values(2,'b');
1 row created.
SQL> commit;
Commit complete.
创建表时指定的表空间是指数据放在指定的表空间,而元数据永远放在system
表空间中
table
与segment
的关系:table
是从关系型数据库的角度出发的,这个table
存放的数据在Oracle
中是怎么使用物理空间的这时候把这个table
叫segment
,站在不同的角度不同的叫法
在第5
号数据文件上,第130
号是段头块
从128
号块开始,一共占用了连续的8
个块(128-135
)这65536
(64k
)的空间都分配给了tt
表,当这8
个块满了就会分配新的块
区id
是0130
是段头块
SQL> alter table tt modify name varchar2(30);
Table altered.
SQL> desc tt;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
NAME VARCHAR2(30)
这几个extent
碰巧是连续的,也有可能不是连续的,但是同一个extent
中的block
一定是连续的
数据库存储结构
组成extent
的block
都是连续的,所以一个extent
只能属于一个data file
OBJECT_ID
是元数据id
,DATA_OBJECT_ID
是数据段的id
,元数据id
永远不会发生变化,不管元数据怎么改变,DATA_OBJECT_ID
可能会发生变化
这个移动的是数据,元数据不会发生任何变化
SQL> alter table tt move tablespace users;
Table altered.
DATA_OBJECT_ID
变了
如果数据库的block
是8k
,那一个tablespace
最多可以有1022
个datafile
SQL> alter tablespace test add datafile '/u01/app/oradata/test02.dbf' size 10M;
Tablespace altered.
SQL> alter table tt move tablespace test;
Table altered.
SQL> insert into tt select * from tt;
78233 rows created.
SQL> commit;
extent
大小发生变化了,
表空间空间不足有三种办法
1.添加数据文件
alter tablespace test add datafile '/u01/app/oradata/test02.dbf' size 10M;
2.增加数据文件大小(增加数据文件大小到10M
)
SQL> alter database datafile 5 resize 10M;
Database altered.
3.改变6
号数据文件为自动增长
SQL> alter database datafile 6 autoextend on;
Database altered.
下面这个sql
说明INCREMENT_BY
的单位是块
SQL> alter database datafile 6 autoextend on next 1M;
Database altered.
data segment size
[0,1M] extent 64k
(1M,64M] extent 1M 128 block
(64M,1G] extent 8M 1024 block
(1G,+∞) 1G extent 64M
上面这种方式是自动分配extent
的方式(autoallocate
)
SQL> create tablespace tbs1 datafile '/u01/app/oradata/prod/tbs01.dbf' size 5M autoextend on next 1M maxsize unlimited autoallocate;
Tablespace created.
SQL> create tablespace tbs2 datafile '/u01/app/oradata/prod/tbs02.dbf' size 5M autoextend on next 1M maxsize unlimited uniform size 128K;
Tablespace created.
创建表空间时要是不指定uniform
的大小默认分配extent
的大小是1M