ORACLE表空间概念去过大型超市吧,一排排的货架很多,看着很杂乱,但是也会分出生鲜区、食品区、日常用品区什么的。 Oracle表空间就是这样的逻辑概念,表空间只是包含一些堆在一起的表的集合。
相当于一个虚拟的划定范围
界限,方便管理的。
1、创建表空间:
格式: create tablespace 表空间名 datafile '数据文件名' size 表空间大小
栗子:create tablespace data_test datafile 'd:\oracle\oradata\test\data_1.dbf' size 2000M;
解释:
  表空间名:自己定义,如果是迁库的话,需与之前的表空间命名一样
  数据文件名:这个是生成存储数据的dbf文件在服务器存储的全路径,包含文件名称,这个随意命名
  表空间大小:2000M 表是 2000兆

 

2、建好tablespace, 就可以建用户了
格式: create user 用户名 identified by 密码 default tablespace 表空间表;
栗子:create user study identified by study default tablespace data_test;

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
4. 授权给新用户
 grant connect,resource to study;   --表示把 connect,resource权限授予study用户
 grant dba to study;   --表示把 dba权限授予给 study
 解释:其中connect是赋予连接数据库的权限,resource是赋予用户只可以创建实体但是没有创建数据结构的权限,dba是赋予用户所有权限,这个地方如果不赋dba权限,会导致某些操作权限级别不够,报错;

 

5. 创建数据表 
 在上面,我们已建好了用户 study 我们现在进入该用户           
 sqlplusw study/study@test   然后就可以在用户study中创建数据表了  
 这里就不再列举如何创建表数据的sql了,网上一搜一大堆,因为我是迁库,直接导入在之前数据亏服务器导出的dmp文件即可
 
6. 导入dmp文件 

在cmd黑窗口下执行语句即可
格式:imp 用户名/密码@实例名 file=dmp文件路径  full=y;
栗子:imp study/study@orcl file="c:/data/temp.dmp" full=y;
可能会出现的错误:导入的dmp文件太大,数据过多,数据库初始化2000M不够用,原因是因为之前没有赋予自动扩充的功能;

查询当前数据库中表空间SEC_D是否为自动扩展:
sec@orcl> select tablespace_name,file_name,autoextensible from dba_data_files where tablespace_name = 'data_test';


TABLESPACE_NAME   FILE_NAME                                 AUT
----------------- ----------------------------------------- ---
DATA_TEST             /u01/app/oracle/oradata/orcl/data_1.dbf  NO
你会发现:NO,未开启自动扩充
sec@orcl> alter database datafile '/u01/app/oracle/oradata/orcl/data_1.dbf' autoextend on;

Database altered.

确认是否已经修改成功
sec@orcl> select tablespace_name,file_name,autoextensible from dba_data_files where tablespace_name = 'data_test';

TABLESPACE_NAME   FILE_NAME                                 AUT
----------------- ----------------------------------------- ---
data_test             /u01/app/oracle/oradata/orcl/data_1.dbf  YES
 

 

 
7. 后悔药(删除表空间,清除创建用户,清除所有的数据)
   以system用户登录,查找需要删除的用户:

   --查找用户

   select  * from dba_users;

   --查找工作空间的路径

   select * from dba_data_files; 

   --删除用户

   drop user 用户名称 cascade;


   --删除表空间
   drop tablespace 表空间名称 including contents and datafiles cascade constraint;

   栗子:删除用户名成为study,表空间名称为data_test

   --删除用户,及级联关系也删除掉
   drop user study cascade;
   --删除表空间,及对应的表空间文件也删除掉
   drop tablespace data_test including contents and datafiles cascade constraint;

 

当然删除用户的时候可能报如下错误:
SQL> drop user study cascade;
drop user study cascade
*
ERROR at line 1:
ORA-01940: cannot drop a user that is currently connected

字面翻译是该用户有连接,不能删除,我把我自己连接的Oracle Develop客户端断开了连接,再次执行,还是报相同的错误,因为除了我们自己连接,还有其他远程客户端连接。该如何解决该问题,成功删除该用户呢?

先查询study用户的连接状况。

SQL>  select username,sid,serial# from v$session where username='study';

USERNAME                              SID    SERIAL#
------------------------------ ---------- ----------
study                                  429          7
study                                  499          9

2 rows selected.

然后把相关的session连接删掉。

alter system kill session'429,7';
alter system kill session'499,9';

这样再次执行删除study用户就可以删除成功了!

SQL> drop user study cascade;

User dropped.

 

 
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄