1.临时表空间
1.1创建临时表空间
CREATE TEMPORARY TABLESPACE temp_tablespace_name
TEMPFILE 'path_to_tempfile/temp_file.dbf'
SIZE initial_size
AUTOEXTEND ON NEXT increment_size MAXSIZE max_size
EXTENT MANAGEMENT LOCAL;
temp_tablespace_name:临时表空间的名称。
'path_to_tempfile/temp_file.dbf':临时表空间数据文件的路径和名称。
SIZE initial_size:指定数据文件的初始大小。
AUTOEXTEND ON NEXT increment_size MAXSIZE max_size:设置数据文件的自动扩展选项,包括每次扩展的大小和最大大小。
EXTENT MANAGEMENT LOCAL:指定区管理方式为本地管理
LOCAL:使用本地管理方式,表示所有的区将直接在表空间内部创建。这种管理方式不使用字典管理,因此创建和访问将更快,但是区的大小将受到限制(最大为 32K * db_block_size)。
DICTIONARY:使用字典管理方式,这是默认选项。在这种管理方式下,区的大小没有限制,但是创建和访问速度较慢
1.2查看临时表空间
使用DBA_TEMP_FILES视图查看临时表空间的数据文件信息。
使用V_$TEMPFILE视图查看临时表空间的状态和启用情况。
使用V$TEMP_EXTENT_POOL、GV_$TEMP_SPACE_HEADER等视图查看临时表空间的使用情况。
例如:
SELECT tablespace_name, file_name, bytes/1024/1024 AS file_size, autoextensible
FROM dba_temp_files;
1.3调整临时表空间大小
使用ALTER DATABASE TEMPFILE语句调整临时表空间数据文件的大小。
可以设置数据文件的自动扩展属性,以便在需要时自动增加大小。
例如:
ALTER DATABASE TEMPFILE 'path_to_tempfile/temp_file.dbf' RESIZE new_size;
ALTER DATABASE TEMPFILE 'path_to_tempfile/temp_file.dbf' AUTOEXTEND ON NEXT increment_size MAXSIZE max_size;
1.4收缩临时表空间
在某些情况下,可能需要收缩临时表空间以释放未使用的空间。然而,由于临时表空间中的数据具有临时性,通常不建议频繁收缩。
可以使用SHRINK SPACE子句来收缩临时表空间,但应谨慎操作以避免影响数据库性能。
1.5 删除表空间
如果不再需要某个临时表空间,可以将其删除。但请注意,删除临时表空间是一个不可逆的操作,应确保已备份所有重要数据。
使用DROP TABLESPACE语句删除临时表空间时,应指定INCLUDING CONTENTS AND DATAFILES选项以同时删除数据文件和表空间。
2.用户管理
2.1创建用户
CREATE USER 用户名 IDENTIFIED BY 密码
DEFAULT TABLESPACE 默认表空间名
TEMPORARY TABLESPACE 临时表空间名
QUOTA 表空间配额 ON 默认表空间名;
不过,需要注意的是,上述语句中的QUOTA子句是可选的,它用于指定用户在默认表空间上的空间配额。如果不指定,则用户将没有在该表空间上创建对象的权限,除非另外授予。
以下是一个具体的例子,其中我们创建了一个名为testuser的用户,密码为testpassword,默认表空间为users,临时表空间为temp,并在users表空间上为用户分配了无限制的空间配额(注意,在实际应用中,通常不建议为用户分配无限制的空间配额,以防止资源滥用):
CREATE USER testuser IDENTIFIED BY testpassword
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;
2.2查看用户权限
2.2.1 查看用户系统权限
查看某个用户的系统权限,可以使用DBA_SYS_PRIVS或USER_SYS_PRIVS视图。DBA_SYS_PRIVS视图显示所有用户和角色的系统权限,而USER_SYS_PRIVS视图仅显示当前用户的系统权限。
-- 查看所有用户的系统权限(需要DBA权限)
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '用户名';
-- 查看当前用户的系统权限
SELECT * FROM USER_SYS_PRIVS;
DBA_SYS_PRIVS
GRANTEE: 授予对象,即哪个用户或角色获得了权限。ADMIN_OPTION: 如果为 'YES',表示被授予对象可以将此系统权限再授予其他用户或角色;如果是 'NO',则表示被授予对象不能进一步传递此权限。PRIVILEGE
: 授予的系统权限类型。常见的系统权限包括:
CREATE SESSION: 允许用户登录到数据库。CREATE TABLE: 允许用户创建表。CREATE VIEW: 允许用户创建视图。CREATE SEQUENCE: 允许用户创建序列。CREATE PROCEDURE: 允许用户创建存储过程。CREATE TRIGGER: 允许用户创建触发器。CREATE SYNONYM: 允许用户创建同义词。CREATE INDEX: 允许用户创建索引。CREATE MATERIALIZED VIEW: 允许用户创建物化视图。CREATE USER: 允许用户创建新的数据库用户。ALTER SYSTEM: 允许用户修改系统参数。DROP USER: 允许用户删除数据库用户。MANAGE FILES: 允许用户管理数据文件等。UNLIMITED TABLESPACE: 允许用户在指定的数据区段内无限制地创建对象。EXECUTE ANY PROCEDURE: 允许用户执行任何存储过程。SELECT ANY TABLE: 允许用户从任何用户的表中选择数据。等
2.2.2 查看用户的对象权限
要查看某个用户的对象权限,可以使用DBA_TAB_PRIVS、ALL_TAB_PRIVS或USER_TAB_PRIVS视图。这些视图分别显示数据库中所有对象、用户可访问的对象以及当前用户的对象的权限。
-- 查看所有用户的对象权限(需要DBA权限)
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = '用户名';
-- 查看当前用户的对象权限
SELECT * FROM USER_TAB_PRIVS;
-- 查看用户可访问的对象的权限
SELECT * FROM ALL_TAB_PRIVS WHERE GRANTEE = '用户名';
DBA_TAB_PRIVS
GRANTEE: 授予对象(通常是用户名或角色名)。TABLE_OWNER: 表的所有者(拥有该表的用户名)。TABLE_NAME: 表的名称。COLUMN_NAME: 如果权限是特定于某一列的,则显示该列的名称。PRIVILEGE: 被授予的权限类型。常见的权限包括:
SELECT: 允许选择表中的行。INSERT: 允许插入新行。UPDATE: 允许修改现有行。DELETE: 允许删除行。INDEX: 允许创建索引。REFERENCES: 允许创建引用该表的外键约束。ALTER: 允许更改表结构。DROP: 允许删除表。TRUNCATE: 允许清空表中的所有数据。EXECUTE: 对于包来说,允许执行包中的过程或函数。USAGE: 对于序列来说,允许使用序列获取值。
ADMIN_OPTION: 如果为 'YES',表示被授予对象可以再将此权限授予给其他用户或角色。如果为 'NO',则表示该权限只能由被授予对象使用而不能传递给其他用户。
2.2.3 查看用户的角色
要查看某个用户拥有的角色,可以使用DBA_ROLE_PRIVS或USER_ROLE_PRIVS视图。
-- 查看所有用户的角色(需要DBA权限)
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = '用户名';
-- 查看当前用户的角色
SELECT * FROM USER_ROLE_PRIVS;
DBA_ROLE_PRIVS视图中的一些重要列及其含义:
GRANTEE: 接受了权限的角色名称。GRANTED_ROLE: 被授予的角色名称。这是指角色本身,而不是用户。标准角色示例:
CONNECT: 允许用户连接到数据库并使用基本功能。这是最基础的角色之一。RESOURCE: 在CONNECT基础上增加了创建表、索引、序列、同义词等的能力。DBA: 非常强大的角色,拥有几乎所有的系统权限,可以管理整个数据库。EXP_FULL_DATABAS: 允许导出整个数据库。
IMP_FULL_DATABASE: 允许导入整个数据库。SELECT_CATALOG_ROLE: 允许用户查询数据字典视图。SYSDBA: 在连接时提供SYSDBA特权,允许用户作为管理员登录并进行管理操作。
用户自定义角色示例:
用户也可以创建自己的角色,并赋予这些角色所需的权限组合。例如:
REPORTS_USER: 可能被授予访问报告相关表的权限。HR_MANAGER: 可能被授予访问人力资源相关数据的权限。WEB_ADMIN: 可能被授予管理网站后端数据的权限。
ADMIN_OPTION: 如果为 'YES',表示被授予的角色可以再将这些权限或角色授予给其他用户或角色。如果为 'NO',则表示该角色只能自己使用这些权限或角色,不能传递给其他用户或角色。DEFAULT_ROLE: 如果为 'YES',表示该角色是默认分配给用户的。这意味着当用户建立一个新的会话时,如果没有显式地启用或禁用角色,默认情况下该角色将会自动激活。
此外,DBA_ROLE_PRIVS也可能包含系统权限,这些权限不是角色的一部分,而是直接授予给角色的。例如:
PRIVILEGE: 如果存在,表示直接授予给角色的系统权限。




