暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

表空间管理

Ann. 2024-12-17
50

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_POOLGV_$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_PRIVSUSER_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_PRIVSALL_TAB_PRIVSUSER_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_PRIVSUSER_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: 如果存在,表示直接授予给角色的系统权限。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论