Oracle专题2之用户、权限、角色以及表空间的管理
1、用系统用户登录Oracle
- 只有用合法的用户才能够访问Oracle数据库。Oracle默认的系统用户:sys/system、sysman、scott。
a、系统用户说明
- sys:这个账户相当于SQL server中的sa账户,是个超级账户,拥有的权限最大,可以完成数据库的所有管理任务。
- system:没有sys的权限大,通常用来创建一些用于查看管理信息的表或者视图,同样也不建议使用system架构来创建一些与管理无关的表或者视图。( sys和system在登录Oracle工具时,sys只能以系统管理员(sysdba)或者系统操作员(sysoper)的权限登录,而system可以直接登录(normal)。)
- sysman:是Oracle数据库中用于EM管理的用户,如果你不用改用户,可以将其删除。
- scott:是Oracle提供的示例用户,里面有一些供初学者学习操作的数据表(emp,dept,salgrader,bonus)。(对于scott用户,定义的密码为tiger。)
b、Oracle用户登录的语法格式
- {username/password@connect_identifier}[AS {SYSDBA | SYSOPER}]
- username / password:指定数据库账户用户名,口令。
- connect_identifier:数据库连接的连接标识符(服务器名)。如果没有连接标识符,SQL*Plus将连接到默认数据库。(如果指定连接标识符,那么OracleOraDb11g_home1TNSListener服务必须启动。)
- SYSDBA、SYSOPER选项是数据库管理权限。(SYSDBA:数据库管理员的权限;SYSOPER:数据库操作员的权限。)
- 命令行中的示例如下:
C:\Users\Administrator>sqlplus /nolog SQL*Plus: Release 11.2.0.1.0 Production on 星期日 11月 26 21:28:37 2017 Copyright (c) 1982, 2010, Oracle. All rights reserved. SQL> conn sys/02000059 as sysdba 已连接。
c、启动scott用户
- 给scott用户解锁【语法格式】:alter user username account unlock。例如:alter user scott account unlock。(默认的scott用户是锁定的)
- 命令行中的示例如下:
-
SQL> conn scott/tiger ERROR: ORA-28000: the account is locked 警告: 您不再连接到 ORACLE。 SQL> conn sys/02000059 as sysdba 已连接。 SQL> alter user scott account unlock; 用户已更改。 SQL> conn scott/tiger ERROR: ORA-28001: the password has expired 更改 scott 的口令 新口令: 重新键入新口令: 口令已更改 已连接。
2、Oracle表空间的管理:创建表空间
a、什么是表空间?
- 数据库与表空间:表空间实际上是数据库的逻辑存储结构,可以把表空间理解为在数据库中开辟的一个空间,用于存放我们数据库的对象,一个数据库可以由多个表空间构成。
- 表空间与数据文件:表空间实际上是由一个或多个数据文件构成的,数据文件的位置和大小可以由我们用户自己来定义。我们所操作的一些表,一些其他的数据对象都是存放在数据文件中的。那么数据文件是物理存储结构,真正可以看到的,而表空间是逻辑存储结构。
b、表空间的分类
- 按使用方式分类:分为永久段表空间、临时段表空间、回滚段表空间。
- 永久段表空间:一般为存储数据的表空间,系统表空间,普通用户使用的表空间都为永久段表空间。永久段表空间的状态有三种:读写、只读、脱机。只有在永久表空间中,才能够配置ASSM管理模式。
- 临时段表空间:一般用来排序和创建索引时使用。临时表空间不存放实际的数据,所以,即使出了问题,也不需要恢复,而且,也不需要备份,因此也不需要记录日志。临时表空间只能是读写模式,而且只能为手动管理段空间模式。可以设置为系统默认临时表空间,命令如下:ALTER DATABASE DEFAULT TEMPORARY TABLESPACE;
- 回滚段(UNDO)表空间:用来存放修改中数据的原数据,回滚段表空间是用来保证数据读一致性的。
c、创建表空间的语法格式
- create [TEMPORARY] TABLESPACE tablespace_name TEMPFILE | DATAFILE 'xxx.dbf' SIZE XX
- 如下示例所示:
SQL> conn sys/02000059 as sysdba 已连接 SQL> create tablespace test1_tablespace datafile 'testfile.dbf' size 10m; 表空间已创建 SQL> create temporary tablespace temptest1_tablespace tempfile 'tempfile.dbf' size 10; 表空间已创建
- 查看表空间:
SQL> select file_name from dba_data_files; FILE_NAME E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TESTFILE.DBF 已选择6行。 SQL> select file_name from dba_temp_files; FILE_NAME E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP01.DBF E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEMPFILE1.DBF SQL>
3、Oracle的用户管理
a、创建用户的语法格式
- create user [user_name] identified by [password] default tablespace [default tablespace] temporary tablespace [temporary tablespace];
- 如下示例所示:
SQL> create user eason identified by test default tablespace test1_tablespace te mporary tablespace temptest1_tablespace; 用户已创建。 SQL>
b、查看创建的用户
- select username from dba_users;
- 如下示例所示:
SQL> select username from dba_users; USERNAME EASON MGMT_VIEW SYS SYSTEM DBSNMP SYSMAN SCOTT ...
c、给创建的用户授权
- grant 权限 to用户名。(说明:授权管理会在后续的专题中详细讲解)
- 如下示例所示:
SQL> grant connect to eason; 授权成功。 SQL>
d、管理用户
- 连接用户:connect 用户名/口令
- 更改密码:Alter user 用户名 identified by 新密码;
- 如下示例所示:
SQL> connect eason/test 已连接。 SQL> Alter user eason identified by 02000059; 用户已更改。
- 不希望某用户登录,而又不删除其用户,可以将用户锁定:Alter user 用户名 account lock;
- 删除用户:drop user 用户名 cascade;(加上cascade 则将用户连同其创建的东西全部删除)
SQL> conn sys/02000059 as sysdba; 已连接。 SQL> alter user eason account lock; 用户已更改。 SQL> drop user eason cascade; 用户已删除。 SQL>
4、Oracle的角色管理
- 什么是角色?
- Oracle角色(role)就是一组权限(或者说是权限的集合)。
- 用户可以给角色赋予指定的权限,然后将角色赋给相应的用户。
- 数据库中角色权限管理的作用:用户(User)只是针对个人管理,而角色(Role)可以针对一批人(该角色下的所有用户)实施统一的管理策略。
a、三种标准的角色
- CONNECT(连接角色):拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
- RESOURCE(资源角色):拥有Resource权限的角色只可以创建实体,不可以创建数据库结构。
- DBA(数据库管理员角色):拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
- 对于普通用户:授予connect,resource权限;对于DBA管理用户,授予dba权限。
- 如下示例所示:(conn /as sysdba连接的是sys用户,此时可以修改sys用户的密码;create user user01 identified by pass01;此命令创建用户默认使用系统表空间,最好是在用户创建时指定表空间。)
SQL> conn /as sysdba 已连接。 SQL> create user user01 identified by pass01; 用户已创建。 SQL> conn user01/pass01 ERROR: ORA-01045: user USER01 lacks CREATE SESSION privilege; logon denied 警告: 您不再连接到 ORACLE。
- 以上示例中,因为没有给创建的user01用户指定连接权限,所以user01用户无法连接oracle数据库。
SQL> conn /as sysdba 已连接。 SQL> grant connect to user01; 授权成功。 SQL> conn user01/pass01; 已连接。
- 以下是CONNECT、RESOURCE、DBA角色授予用户时的区别示例。
- CONNECT角色可以登录Oracle数据库:
SQL> conn /as sysdba 已连接。 SQL> create user user01 identified by pass01; 用户已创建。 SQL> conn user01/pass01 ERROR: ORA-01045: user USER01 lacks CREATE SESSION privilege; logon denied 警告: 您不再连接到 ORACLE。 SQL> conn /as sysdba 已连接。 SQL> grant connect to user01; 授权成功。 SQL> conn user01/pass01; 已连接。
- CONNECT角色不可以创建实体,RESOURCE角色可以创建实体:
SQL> conn user01/pass01; 已连接。 SQL> create table test(id number, name varchar2(20)); create table test(id number, name varchar2(20)) 第 1 行出现错误: ORA-01031: 权限不足 SQL> conn /as sysdba; 已连接。 SQL> grant resource to user01; 授权成功。 SQL> conn user01/pass01; 已连接。 SQL> create table test(id number, name varchar2(20)); 表已创建。
- RESOURCE角色不可以创建数据库结构,而DBA角色可以创建数据库结构:
SQL> conn user01/pass01; 已连接。 SQL> create user user02 identified by pass02; create user user02 identified by pass02 第 1 行出现错误: ORA-01031: 权限不足 SQL> conn /as sysdba; 已连接。 SQL> grant dba to user01; 授权成功。 SQL> conn user01/pass01; 已连接。 SQL> create user user02 identified by pass02; 用户已创建。
b、创建角色
- 语法格式:CREATE ROLE 角色名;
- 例如:CREATE ROLE manager;
C:\Users\Administrator>sqlplus /nolog SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 27 09:26:10 2017 Copyright (c) 1982, 2010, Oracle. All rights reserved. SQL> conn sys/02000059 as sysdba 已连接。 SQL> create role manager; 角色已创建。
c、为角色赋予权限
- 语法格式:GRANT 权限 TO 角色
- 例:GRANT create table,create view TO manager;
SQL> grant create table,create view TO manager; 授权成功。 SQL>
d、将角色赋予用户
- 语法格式:GRANT 角色 TO 用户;
- 例如:GRANT manager TO user01,user02;
SQL> grant manager TO user01; 授权成功。 SQL>
e、撤销对用户授予的权限
- 语法格式:revoke 用户 from 角色;
- 例如:revoke manager from user01;
SQL> revoke manager from user01; 撤销成功。 SQL>
f、删除自定义角色
- 语法格式:drop role 角色;
- 例如:drop role manager;
SQL> drop role manager; 角色已删除。 SQL>
5、Oracle用户的权限管理
- 权限的分类:分为两类,系统权限和对象(实体)权限。
- 系统权限:允许用户执行特定的数据库动作,如创建表、创建索引、连接实例等。
- 对象(实体)权限:允许用户操纵一些特定的对象,如读取视图,可更新某些列、执行存储过程等。
a、系统权限
- 查看Oracle所有系统权限:SELECT * FROM SYSTEM_PRIVILEGER_MAP;
SQL> select * from system_privilege_map; PRIVILEGE NAME PROPERTY -3 ALTER SYSTEM 0 -4 AUDIT SYSTEM 0 -5 CREATE SESSION 0 -6 ALTER SESSION 0 -7 RESTRICTED SESSION 0 -10 CREATE TABLESPACE 0 -11 ALTER TABLESPACE 0 -12 MANAGE TABLESPACE 0 -13 DROP TABLESPACE 0 -15 UNLIMITED TABLESPACE 0 -20 CREATE USER 0 PRIVILEGE NAME PROPERTY -21 BECOME USER 0 -22 ALTER USER 0 ... 已选择208行。
- 系统权限列表详请:
alter any cluster 修改任意簇的权限 alter any index 修改任意索引的权限 alter any role 修改任意角色的权限 alter any sequence 修改任意序列的权限 alter any snapshot 修改任意快照的权限 alter any table 修改任意表的权限 alter any trigger 修改任意触发器的权限 alter cluster 修改拥有簇的权限 alter database 修改数据库的权限 alter procedure 修改拥有的存储过程权限 alter profile 修改资源限制简表的权限 alter resource cost 设置佳话资源开销的权限 alter rollback segment 修改回滚段的权限 alter sequence 修改拥有的序列权限 alter session 修改数据库会话的权限 alter sytem 修改数据库服务器设置的权限 alter table 修改拥有的表权限 alter tablespace 修改表空间的权限 alter user 修改用户的权限 analyze 使用analyze命令分析数据库中任意的表、索引和簇 audit any 为任意的数据库对象设置审计选项 audit system 允许系统操作审计 backup any table 备份任意表的权限 become user 切换用户状态的权限 commit any table 提交表的权限 create any cluster 为任意用户创建簇的权限 create any index 为任意用户创建索引的权限 create any procedure 为任意用户创建存储过程的权限 create any sequence 为任意用户创建序列的权限 create any snapshot 为任意用户创建快照的权限 create any synonym 为任意用户创建同义名的权限 create any table 为任意用户创建表的权限 create any trigger 为任意用户创建触发器的权限 create any view 为任意用户创建视图的权限 create cluster 为用户创建簇的权限 create database link 为用户创建的权限 create procedure 为用户创建存储过程的权限 create profile 创建资源限制简表的权限 create public database link 创建公共数据库链路的权限 create public synonym 创建公共同义名的权限 create role 创建角色的权限 create rollback segment 创建回滚段的权限 create session 创建会话的权限 create sequence 为用户创建序列的权限 create snapshot 为用户创建快照的权限 create synonym 为用户创建同义名的权限 create table 为用户创建表的权限 create tablespace 创建表空间的权限 create user 创建用户的权限 create view 为用户创建视图的权限 delete any table 删除任意表行的权限 delete any view 删除任意视图行的权限 delete snapshot 删除快照中行的权限 delete table 为用户删除表行的权限 delete view 为用户删除视图行的权限 drop any cluster 删除任意簇的权限 drop any index 删除任意索引的权限 drop any procedure 删除任意存储过程的权限 drop any role 删除任意角色的权限 drop any sequence 删除任意序列的权限 drop any snapshot 删除任意快照的权限 drop any synonym 删除任意同义名的权限 drop any table 删除任意表的权限 drop any trigger 删除任意触发器的权限 drop any view 删除任意视图的权限 drop profile 删除资源限制简表的权限 drop public cluster 删除公共簇的权限 drop public database link 删除公共数据链路的权限 drop public synonym 删除公共同义名的权限 drop rollback segment 删除回滚段的权限 drop tablespace 删除表空间的权限 drop user 删除用户的权限 execute any procedure 执行任意存储过程的权限 execute function 执行存储函数的权限 execute package 执行存储包的权限 execute procedure 执行用户存储过程的权限 force any transaction 管理未提交的任意事务的输出权限 force transaction 管理未提交的用户事务的输出权限 grant any privilege 授予任意系统特权的权限 grant any role 授予任意角色的权限 index table 给表加索引的权限 insert any table 向任意表中插入行的权限 insert snapshot 向快照中插入行的权限 insert table 向用户表中插入行的权限 insert view 向用户视图中插行的权限 lock any table 给任意表加锁的权限 manager tablespace 管理(备份可用性)表空间的权限 references table 参考表的权限 restricted session 创建有限制的数据库会话的权限 select any sequence 使用任意序列的权限 select any table 使用任意表的权限 select snapshot 使用快照的权限 select sequence 使用用户序列的权限 select table 使用用户表的权限 select view 使用视图的权限 unlimited tablespace 对表空间大小不加限制的权限 update any table 修改任意表中行的权限 update snapshot 修改快照中行的权限 update table 修改用户表中的行的权限 update view 修改视图中行的权限
b、授予用户(或角色)系统权限的语法格式
- GRANT privilege [,privilege...] TO user [,user | role,PUBLIC...]
- 举例:grant create table, create sequence to manager; grant manager to user01,user02;(注意:这句话的意思是对用户user01,user02分配了创建表,创建序列的权限。)
SQL> grant create table, create sequence to manager; 授权成功。 SQL>
c、撤销用户(或角色)系统权限的语法格式
- REVOKE {privilege | role} FROM {user_name | role_name | PUBLIC}
- 举例:revoke manager from user01; revoke create table,create sequence from manager;
SQL> revoke create table,create sequence from manager; 撤销成功。 SQL>
d、对象权限
- 查询Oracle所有对象权限:select * from table_privilege_map;,常用的对象权限如:select,update,insert,delete,all等。(all包括所有权限)
SQL> select * from table_privilege_map; PRIVILEGE NAME 0 ALTER 1 AUDIT 2 COMMENT 3 DELETE 4 GRANT 5 INDEX 6 INSERT 7 LOCK 8 RENAME 9 SELECT 10 UPDATE 11 REFERENCES 12 EXECUTE 16 CREATE 17 READ 18 WRITE 20 ENQUEUE 21 DEQUEUE 22 UNDER 23 ON COMMIT REFRESH 24 QUERY REWRITE 26 DEBUG 27 FLASHBACK 28 MERGE VIEW 29 USE 30 FLASHBACK ARCHIVE 已选择26行。
e、授予用户(或角色)对象权限的语法格式
- GRANT object_priv | ALL [(columns)] ON object TO {user | role | PUBLIC}
- 举例:grant select, update, insert on scott.emp to manager2; grant manager2 to user03; grant all on scott.emp to user04;
SQL> conn user01/pass01; 已连接。 SQL> select * from scott.emp; select * from scott.emp 第 1 行出现错误: ORA-00942: 表或视图不存在 SQL> conn /as sysdba; 已连接。 SQL> grant select on scott.emp to user01; 授权成功。 SQL> conn user01/pass01; 已连接。 SQL> select * from scott.emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 17-12月-80 800 20 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
f、撤销用户(或角色)对象权限的语法格式
- REVOKE {privilege [,privilege...] | ALL} ON object FROM {user[,user...] | role | PUBLIC}
- 举例说明:revoke all on scott.emp from user04;
SQL> conn /as sysdba; 已连接。 SQL> revoke select on scott.emp from user01; 撤销成功。 SQL> conn user01/pass01; 已连接。 SQL> select * from scott.emp; select * from scott.emp 第 1 行出现错误: ORA-00942: 表或视图不存在
6、表空间的管理:查看用户的表空间
a、oracle数据字典
- 数据字典是oracle存放数据库信息的地方,几乎所有的系统信息和对象信息都可以在数据字典中进行查询。数据字典是oracle数据库系统的信息核心,它是一组提供有关数据库信息的表和视图的集合,这些表和视图是只读的。它是随着数据库的建立而建立的,当数据库执行特定动作时数据字典也会自动更新。数据一览与数据字典来记录、校验和管理正在进行的操作。
- oracle中,sys用户是数据字典的拥有者,数据字典保证在所有数据库的系统表空间system内,任何用户都无权更改sys模式下的模式对象或者数据字典中的行。也就是说数据字典只能查询,不能手动进行修改。
- 数据字典的用途:oracle通过存取数据字典从而比较方便地获取有关用户某视图对象和存储结构等信息。当系统执行了DDL语句后,oracle会及时修改数据字典。任何用户只能以只读的形式来使用数据字典获取数据库信息。
-
数据字典存储的信息:数据用户的名称、为用户授予的权限和角色、模式对象的名称(如tables、views、indexex、procedures、functions、packages,triggers等)、完整性约束的具体信息、每个字段的默认值、数据库空间的使用情况、审计功能、对象与用户的严格管理(适用于高度机密管理)、其他一般数据库信息。
- 两种前缀的数据字典视图:
- user_:任何用户都可以读取的视图,每个用户读取的都不一样,它只提供当前用户某视图的对象信息。
- dba_:提供了只有数据库管理员才可以读取的视图,包括所有用户视图中的对象信息。
b、查看用户的表空间
- 相关的数据字典:dba_tablespaces针对的是数据库管理员级别的表空间描述信息,而user_tablespaces针对的是普通用户级别的表空间描述信息。
- 命令行示例如下:scott用户可以查询user_tablespaces,而不可以查询dba_tablespaces
SQL> conn scott/02000059 已连接。 SQL> select tablespace_name from dba_tablespaces; select tablespace_name from dba_tablespaces 第 1 行出现错误: ORA-00942: 表或视图不存在 SQL> select tablespace_name from user_tablespaces; TABLESPACE_NAME SYSTEM SYSAUX UNDOTBS1 TEMP USERS EXAMPLE TEST1_TABLESPACE TEMPTEST1_TABLESPACE 已选择8行。
- 而sys用户可以查询user_tablespaces,而不可以查询dba_tablespaces:
SQL> conn /as sysdba; 已连接。 SQL> select tablespace_name from dba_tablespaces; TABLESPACE_NAME SYSTEM SYSAUX UNDOTBS1 TEMP USERS EXAMPLE TEST1_TABLESPACE TEMPTEST1_TABLESPACE 已选择8行。 SQL> select tablespace_name from user_tablespaces; TABLESPACE_NAME SYSTEM SYSAUX UNDOTBS1 TEMP USERS EXAMPLE TEST1_TABLESPACE TEMPTEST1_TABLESPACE 已选择8行。
c、查看系统用户的表空间
- 相关的数据字典:dba_users针对于管理员的数据字典,用于查看数据库所有用户的用户信息;user_users针对于普通用户的数据字典,用于查看数据库中当前用户的用户信息。
- 命令行示例如下:查看dba_users的默认表空间和临时表空间:
SQL> conn system/02000059 as sysdba 已连接。 SQL> select default_tablespace,temporary_tablespace from dba_users where username = 'SYSTEM'; DEFAULT_TABLESPACE TEMPORARY_TABLESPACE SYSTEM TEMP SQL> select username, default_tablespace,temporary_tablespace from dba_users; USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE MGMT_VIEW SYSTEM TEMP SYS SYSTEM TEMP SYSTEM SYSTEM TEMP SCOTT USERS TEMP ...
d、设置用户默认或者临时表空间
- 语法格式:ALTER USER username DEFAULT | TEMPORARY TABLESPACE tablespace_name;
- 命令行示例代码如下:
SQL> ALTER USER user01 DEFAULT TABLESPACE TEST1_TABLESPACE TEMPORARY TABLESPACE TEMPTEST1_TABLESPACE 用户已更改。 SQL> select default_tablespace,temporary_tablespace from dba_users where username='USER01'; DEFAULT_TABLESPACE TEMPORARY_TABLESPACE TEST1_TABLESPACE TEMPTEST1_TABLESPACE
7、表空间管理:修改表空间的状态
a、修改表空间的状态1
- 设置联机或者脱机状态:ALTER TABLESPACE tablespace_name ONLINE | OFFLINE;
- 需要注意的是,如果一个表空间设置为脱机状态,表示该表空间暂时不让访问,设置成脱机状态不是删除,当我们需要使用该表空间还可以将其设置成联机状态,正常使用。(默认为联机状态)
- 命令行示例如下:
SQL> alter tablespace test1_tablespace offline; 表空间已更改。 SQL> select status from dba_tablespaces where tablespace_name='TEST1_TABLESPACE'; STATUS OFFLINE
b、修改表空间的状态2
- 设置只读或者可读写状态:ALTER TABLESPACE tablespace_name READ ONLY | READ WRITE;
- 默认为可读写状态。
- 命令行示例如下:表空间在脱机状态下是没有办法修改成只读状态,需要将其修改成联机状态后再修改。
SQL> alter tablespace test1_tablespace read only; alter tablespace test1_tablespace read only 第 1 行出现错误: ORA-01539: 表空间 'TEST1_TABLESPACE' 未联机 SQL> alter tablespace test1_tablespace online; 表空间已更改。 SQL> alter tablespace test1_tablespace read only; 表空间已更改。 SQL> select status from dba_tablespaces where tablespace_name='TEST1_TABLESPACE'; STATUS READ ONLY
c、增加表空间中的数据文件
- 语法格式:ALTER TABLESPACE tablespace_name ADD DATAFILE 'filename.dbf' SIZE xx;
(向创建好的表空间中增加数据文件) - 命令行示例如下:
SQL> select status from dba_tablespaces where tablespace_name='TEST1_TABLESPACE'; STATUS READ ONLY SQL> alter tablespace test1_tablespace add datafile 'test2_datafile.dbf' size 10m; alter tablespace test1_tablespace add datafile 'test2_datafile.dbf' size 10m 第 1 行出现错误: ORA-01641: 表空间 'TEST1_TABLESPACE' 未联机 - 无法添加数据文件 SQL> alter tablespace test1_tablespace read write; 表空间已更改。 SQL> alter tablespace test1_tablespace add datafile 'test2_datafile.dbf' size 10m; 表空间已更改。 SQL> select file_name from dba_data_files where tablespace_name='TEST1_TABLESPACE'; FILE_NAME E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TESTFILE.DBF E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST2_DATAFILE.DBF
- 以上示例中需要向test1_tablespace表空间中添加数据文件,需要将其状态转换为可读写状态。
d、增加表空间中的删除数据文件
- 语法格式:ALTER TABLESPACE tablespace_name DROP DATAFILE 'filename.dbf';
- 需要注意的是,不能够删除表空间中的第一个创建的数据文件,如果需要删除的话,我们需要把整个表空间都删除掉。
- 命令行示例如下:
SQL> alter tablespace test1_tablespace DROP DATAFILE 'TEST2_DATAFILE.DBF'; 表空间已更改。 SQL> select file_name from dba_data_files where tablespace_name='TEST1_TABLESPACE'; FILE_NAME E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TESTFILE.DBF SQL> alter tablespace test1_tablespace DROP DATAFILE 'TESTFILE.DBF'; alter tablespace test1_tablespace DROP DATAFILE 'TESTFILE.DBF' 第 1 行出现错误: ORA-03263: 无法删除表空间 TEST1_TABLESPACE 的第一个文件
e、删除表空间
- 语法格式:DROP TABLESPACE table_name [INCLUDING CONNENTS]
- 需要注意的是,如果删除时只是单纯的想删除表空间,而不删除数据文件的话,可以如下:
drop tablespace tablespace_name;;而如果在删除表空间的同时还想要把数据文件也删除的话,那么需要添加如下内容:including contents。