在同一个数据库下
1. 建立两个表空间tms_data 和wms_date 。
create tablespace tms_data
datafile 'e:\ tms_data .dbf'
size 32 M
autoextend on
next 5 M maxsize 2048 M ;
create tablespace wms_data
datafile 'e:\ wms_data .dbf'
size 32 M
autoextend on
next 5 M maxsize 2048 M ;
2. 建立两个用户tms 和wms , 密码分别为tms123 和wms123 。tms 的默认表空间设置为tms_data ,wms 的默认表空间设置为wms_date 。
create user tms identified by tms123 default tablespace tms_data;
create user wms identified by wms123 default tablespace wms_data;
2. 用tms 用户进入
创建表tms_test 。
创建表tms_test1 ,指定tms_test1 的表空间为wms_date 。
create table tms_test( id number ( 10 ));
create table tms.tms_test( id number ( 10 )) tablespace wms_data;
用wms 用户进入
创建表wms_test 。
创建表wms_test1 ,指定wms_test1 的表空间为tms_date 。
create table wms_test( id number ( 10 ));
create table wms.wms_test1( id number ( 10 )) tablespace tms_data;
用tms 账号进入,查询tms_test 、tms_test1 、wms_test 和wms_test1 表。
select * from tms_test
select * from tms_test 1
select * from wms_test
select * from wms_test 1
结果如下:
操作账号 账号默认表空间 表创建者 表所属的表空间 是否可以访问
tms tms_data tms tms_data 能
tms tms_data tms wms_data 能
tms tms_data wms wms_data 不能
tms tms_data wms tms_data 不能
发现查询 wms_test 表时出现表不存在的错误,当加上 wms_test 表的所有者,即创建人的时候,就可以查询 wms_test 表了。
发现查询 wms_test 1 表时出现表不存在的错误,当加上 wms_test 表的所有者,即创建人的时候,就可以查询 wms_test 1 表了。
select * from wms.wms_test 。
select * from wms.wms_test 1 。
用wms 账号测试是会发现同样的情况。
结论:一个用户创建的表,如tms 用户。无论是放在其默认的表空间(tms_data ),还是其它的表空间(wms_date) 。都能直接访问。
但如果是其它用户创建的表,就算和当前用户在同一个表空间,也不能访问,需要在表前面加上创建者名字。
两个用户可以创建相同的表,因为表是和用户相关的。那么表空间有什么用呢?
比如有USER1和USER2两个用户,A和B两个表空间,
USER1创建表T1,USER2创建表T2,
那么:T1和T2可以都在A表空间,或者T1在表空间A,T2在表空间B。
假如将USER1创建的表都放A表空间,这样就避免A用户的应用查询数据时,跨表空间查询。提高检索速度。很显然,在一个表空间内查询肯定速度高于跨表空间。