Oracle如何把一个表建立在指定的数据文件上

假设Oralce的USERS表空间有3个数据文件user01.dbf、user02.dbf、user03.dbf,在USERS表空间新增一个数据文件user04.dbf,
scott用户创建一个表Test(tid int,tname varchar2(20)),要求该表创建在USERS表空间的user04.dbf数据文件里,通过以下SQL可以查到结果
SQL>select a.OWNER,a.TABLESPACE_NAME,a.SEGMENT_NAME "TABLE_NAME",b.file_name,b.BYTES/1024/1024 "SIZE/M" FROM dba_extents a,dba_data_files b where a.file_id=b.file_id AND a.segment_name ='TEST';
请问该怎么写SQL?

Oracle在建表时可以指定表空间,不能指定数据文件,也是不希望用户过多介入物理层级的操作。
有新的数据文件加进来,数据会在多个文件上写,这些管理由Oracle完成。

可以这样吗?
先把user01.dbf、user02.dbf、user03.dbf 这三个数据文件offline。
ALTER DATABASE DATAFILE 'XXXX.DBF' OFFLINE;
然后
再建表指定表空间 USERS
create Test(tid int,tname varchar2(20))
tablespace USERS

这个样子可以吗?

1、创建表空间:
格式: 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兆)
2、建好tablespace, 就可以建用户了
格式: create user 用户名 identified by 密码 default tablespace 表空间表;
create user study identified by study default tablespace data_test;
(*我们创建一个用户名为 study,密码为 study, 缺少表空间为 data_test -这是在第二步建好的.)
(*缺省表空间表示 用户study今后的数据如果没有专门指出,其数据就保存在 data_test中, 也就是保存在对应的物理文件 e:\oracle\oradata\test\data_1.dbf中)

创建用户并指定表空间
CREATE USER cici IDENTIFIED BY cici PROFILE DEFAULT DEFAULT TABLESPACE CICI ACCOUNT UNLOCK;
create user jykl identified by jykl default tablespace jykl_data temporary tablespace jykl_temp;
授权给新用户
GRANT connect, resource TO cici;
grant create session to cici;
4. 授权给新用户
grant connect,resource to study;
--表示把 connect,resource权限授予study用户
grant dba to study;
--表示把 dba权限授予给 study
5. 创建数据表

在上面,我们已建好了用户 study 我们现在进入该用户

sqlplusw study/study@test 然后就可以在用户study中创建数据表了

格式: create table 数据表名

本例演示如何创建名为 "Person" 的表。
该表包含 5 个列,列名分别是:"Id_P"、"LastName"、"FirstName"、"Address" 以及 "City":
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
Id_P 列的数据类型是 int,包含整数。其余 4 列的数据类型是 varchar,最大长度为 255 个字符。
空的 "Persons" 表类似这样:

alter table xx allocate extent ( datafile '你指定的文件名' size xxM)

预先分配 该表的extent到该数据文件

1
from askmaclean

表是建立在数据库里的,数据库才是在表空间里的。表空间对应数据文件。