参考书籍: 循序渐进 Oracle 数据库管理优化与备份恢复
Oracle 基础知识
如果之前仅安装了数据库软件(或者也应用了补丁软件),在安装完成之后,可以通过运行 DBCA(Database Configuration Assistant)来启动数据库创建过程。
安装过程名词解释
- DBCA: Database Configuration Assistant;
- 模板: “种子数据库” 的备份集;
- EM: Enterprise Manager;
- ASM: Automatic Storage Management,自动存储管理,该技术主要是为 RAC 集群数据库开发的;
- OMF: Oracle Managed Files;
- Flash_Recovery_Area: 快速恢复区;
- SGA: System Global Area,系统全局区;
- PGA: Program Global Area,程序全局区;
系统管理语句
查看自动任务
1
2
3
4
5
6
7SQL> select client_name,task_name,status from dba_autotask_task;
CLIENT_NAME TASK_NAME STATUS
---------------------------------------------------------------- ---------------------------------------------------------------- --------
sql tuning advisor AUTO_SQL_TUNING_PROG ENABLED
auto space advisor auto_space_advisor_prog ENABLED
auto optimizer stats collection gather_stats_prog ENABLED查看告警日志文件位置,在创建数据库的过程中遇到的错误,可以通过查找 Oracle 数据库的告警日志文件(Alert file)获得,某些情况下还会有详细的跟踪文件(trace file)生成,这些文件的位置,在 Oracle 11g 之前,由 *dump 参数指定,告警日志文件 alert_
.log 的位置由参数 background_dump_dest 定义: 1
2
3
4
5SQL> show parameter background_dump_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest string /u01/app/oracle/diag/rdbms/orcl/orcl/trace从 Oracle 11g 开始,alter 文件的格式发生了变化,除了原有的文本格式外,还引入了 XML 格式。现在告警日志文件的存储位置受到一个新的参数影响,这个参数是 diagnostic_dest,原有的 *dump 参数被废弃:
1
2
3
4
5SQL> show parameter diag
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
diagnostic_dest string /u01/app/oraclediagnostic_dest 是 Oracle 11g 的新特性自动诊断库(Automatic Diagnostic Repository,ADR)的设置,该目录用于存放数据库诊断日志,跟踪文件等,通常称为 ADR base,该参数的默认值和环境变量 ORACLE_BASE 有关
- 如果设置了 ORACLE_BASE,则 DIAGNOSTIC_DEST = ORACLE_BASE;
- 如果未设置 ORACLE_BASE,则 DIAGNOSTIC_DEST = ORACLE_HOME/log;
查询 v$diag_info 视图可以获得跟踪诊断的相关信息,其中
Default Trace File
指出进程跟踪文件的可能名称1
2
3
4
5
6
7
8
9
10
11
12
13
14
15SQL> select name, value from v$diag_info;
NAME VALUE
----------------------------------------------------------------------------------------------------
Diag Enabled TRUE
ADR Base /u01/app/oracle
ADR Home /u01/app/oracle/diag/rdbms/orcl/orcl
Diag Trace /u01/app/oracle/diag/rdbms/orcl/orcl/trace
Diag Alert /u01/app/oracle/diag/rdbms/orcl/orcl/alert
Diag Incident /u01/app/oracle/diag/rdbms/orcl/orcl/incident
Diag Cdump /u01/app/oracle/diag/rdbms/orcl/orcl/cdump
Health Monitor /u01/app/oracle/diag/rdbms/orcl/orcl/hm
Default Trace File /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_6261.trc
Active Problem Count 0
Active Incident Count 0
ORACLE_SID 的含义
SID 是什么?在数据库启动过程中又起到什么作用呢?
SID 是 System IDentifier 的缩写,而 ORACLE_SID 就是 Oracle System Identifier 的缩写。在 Oracle 系统中,ORACLE_SID 以环境变量的形式出现,在特定版本的 Oracle 软件安装目录(也就是 ORACLE_HOME)下,当 Oracle 实例启动时,操作系统上 fork 的进程必须通过这个 SID 将实例与其他实例区分开来,这就是 SID 的作用。
我们知道 Oracle 的实例(instance)是由一块共享内存区域(SGA)和一组后台进程(background processes)共同组成;而后台进程正是数据库和操作系统进行交互的通道,这些进程的名称就是通过 ORACLE_SID 决定的。
实例的启动仅需要一个参数文件,而这个参数文件的名称就是由 ORACLE_SID 决定的,对于 init 文件,缺省的文件名称是 init
spfile 从 Oracle 9i 开始引入并成为了缺省使用的参数文件,Oracle 启动实例时按照以下顺序从缺省目录查找参数文件:
1 | spfile<ORACLE_SID>.ora --> spfile.ora --> init<ORACLE_SID>.ora |
如果这三个文件都不存在,则 Oracle 实例将无法启动。
通过这些信息可以知道,在同一个 ORACLE_HOME 下,Oracle 能够根据 ORACLE_SID 将实例区分开来,但是如果在不同的 ORACLE_HOME 下,Oracle 将不屏蔽相同名称的 ORACLE_SID,也就是说在同一台主机的不同 ORACLE_HOME 下,Oracle 也是能够创建相同 ORACLE_SID 的实例的。
在操作系统上,Oracle 能够通过 ID 标识将共享内存或信号量区分开来,通过 Oracle 提供了一个小工具 sysresv,我们可以找到对应于不同的 ORACLE_SID,操作系统上创建的共享内存段 ID(Shared Memory)和信号量ID(Semaphores)等信息
1 | # sysresv -l orcl |
在 Linux/UNIX 系统上,一个名为 oratab 的文件还记录有 ORACLE_SID 信息。在 Solaris 环境中,这个文件一般位于 /var/opt/oracle 目录下,在 Linux 及其他 UNIX 平台,这个文件一般位于 /etc 目录下。
该文件的主要内容如下:
1 | $ cat /etc/oratab |
当执行 dbstart 脚本时,Oracle 会根据这里记录的 ORACLE_SID 的 <N|Y> 的设置来决定是否启动相关实例。
总结一下,实际上不管在 Windows 还是 Linux/UNIX 环境下,ORACLE_SID 的作用就是设置一个 Oracle 环境窗口,通过这个环境变量来标识和命名系统进程,此后 Oracle 的活动可以由此展开。
INSTANCE_NAME 的含义及作用
作为 Oracle 数据库的重要组成部分 INSTANCE 也存在一个参数标识: INSTANCE_NAME。
INSTANCE_NAME 是 Oracle 数据库的一个参数,参数文件中定义,用于标识数据库实例的名称,其缺省值通常就是 ORACLE_SID,但是不同的实例可以有相同的实例名。通过简单的参数文件复制,我们就可以在同一台服务器上创建多个具有相同 instance_name 参数设置的实例。
首先确认当前的参数文件:
1 | [oracle@oracle dbs]$ cd $ORACLE_HOME/dbs |
复制参数文件,更改名称:
1 | [oracle@oracle dbs]$ cp initORCL.ora inittest.ora |
接下来通过导入新的 ORACLE_SID,我们就可以启动新的实例:
1 | $ export ORACLE_SID=test |
现在 ORACLE_SID 为 test 的实例已经启动,操作系统上的进程以 test 名称标记
1 | # ps -ef |grep pmon |
总结一下,ORACLE_SID 在这里用于标识进程,而 INSTANCE_NAME 则用来标识实例,两者可以具有不同的名称,但是如果不同往往带来歧义,不具备实际的意义,所以从 Oracle Database 10g 开始,缺省的情况下,Oracle 将 instance_name 这个参数从参数文件中剔除,这样就能够尽量保证 ORACLE_SID 和 instance_name 的一致。
此外,Oracle 的监听器(listener)配置文件中的 SID_NAME 就是来自 instance_name 参数,监听器通过 instance_name 才能确定需要将连接请求注册到哪一个实例上。通常 listener.ora 文件中的 SID_NAME 相关的设置类似如下示例:
1 | SID_LIST_LISTENER = |
Orcale 的口令文件
Oracle 在启动过程中,会在 $ORACLE_HOME/dbs 目录下查找口令文件,查找的顺序是首先检查 orapw<ORACLE_SID>
文件,如果不存在则查找 orapw 文件,如果 orapw 文件也不存在,就会报出如下错误:
1 | SQL> startup force; |
口令文件丢失或损坏后,通常可以通过如下命令重建口令文件:
1 | [oracle@oracle dbs]$ orapwd file=orapwtest password=oracle entries=5 |
在数据库没有启动之前,数据库内建用户是无法通过数据库来验证身份的,此时口令文件的作用就体现出来了。口令文件中存放了具有 sysdba/sysoper 身份用户的用户名及口令,Oracle 允许用户通过口令文件验证,在数据库未启动之前登录,从而启动实例进而加载并打开数据库;而如果没有口令文件,在数据库未启动之前就只能通过操作系统认证方式来启动实例。在 Oracle DataGuard 环境中,要求主数据库和备用数据库的口令文件 SYS 用户密码相同,这时候经常会使用 orapwd 工具重建口令文件的技能。
Oracle 用户通过一个初始化参数 remote_login_passwordfile 来限制口令文件的使用,通过这个参数可以设置用户登录时是否检查口令文件,以及有多少个数据库可以使用口令文件。这个参数有三个选项:EXCLUSIVE,SHARED 和 NONE。
当 remote_login_passwordfile 设置为 NONE 时,远程用户将不能通过 sysdba/sysoper 身份登录数据库:
1 | SQL> show parameter pass |
此时通过远程连接会收到如下错误:
1 | SQL> connect sys/oracle@orcl as sysdba |
此处实际上是无法通过口令文件验证。缺省的 remote_login_passwordfile 参数设置为 exclusive,支持远程 sysdba 的登录操作;
1 | SQL> alter system set remote_login_passwordfile=exclusive scope=spfile; |
这个参数是静态参数,修改后重启数据库才能生效。当 remote_login_passwordfile 参数设置为 exclusive 时,可以通过远程以 sysdba 身份登录数据库:
1 | [oracle@oracle ~]$ sqlplus /nolog |
当 remote_login_passwordfile 参数设置为 shared 时,则多个数据库可以共享一个口令文件,但是此时口令文件中只能存储 SYS 用户的口令,此时其他用户不能被授予 sysdba 身份:
1 | SQL> select * from v$pwfile_users; |
db_name 参数和 instance_name 参数
对于 Oracle 数据库来说,db_name 代表数据库的名称,而 instance_name 代表实例的名称,instance_name 通过参数文件即可修改,而 db_name 则不然。
我们来看一下 Oracle 对数据库名称的定义:DB_NAME 必须是一个不超过 8 个字符的文本串。在数据库创建过程中,db_name 被记录在数据文件,日志文件和控制文件中。如果实例启动过程中参数文件中的 db_name 和控制文件中的数据库名称不一致,则数据库不能启动。
通过以上定义可以看到,db_name 是具有稳定意义的参数,在数据文件,日志文件和控制文件中都会记录数据库的名称,这个名称完全可以不同于 instance_name。又由于 db_name 有存储的稳定性,所以不能简单的随意更改。
一个实例(instance_name)可以 mount 并打开任何数据库(db_name),但是同一时间一个实例(instance_name)只能打开一个数据库;一个数据库(db_name)同一时间可以为任一实例(instance_name)所打开,但是在非 RAC 情况下,同一时间只能被同一个实例打开。
用户的创建与管理
Oracle 系统默认账号
Oracle 安装好后有很多的系统默认用户,比如 sys 和 system,对于这2个用户里的元数据我们没有必要重新导出,不然导入的时候还会提示错误。
官方文档: 由数据库配置助手 (DBCA) 创建的所有数据库都包括 SYS、SYSTEM、SYSMAN 和 DBSNMP 数据库帐户。此外,Oracle 数据库还提供了其他几个管理帐户。在使用这些帐户之前,您必须解锁它们并重置它们的密码。
以下是 11G 版本的默认用户
| User Name | 描述 |
| :— | :— | :— |
| ANONYMOUS | 启用对 Oracle XML DB 的 HTTP 访问。 |
| APEX_030200 | 该帐户拥有 Application Express 架构和元数据。 |
| APEX_PUBLIC_USER | 用于通过 Oracle HTTP Server 和 mod_plsql 进行 Application Express 配置的最低特权帐户。 |
| APPQOSSYS | 用于存储和管理 Oracle Quality of Service Management 所需的所有数据和元数据 |
| BI | 拥有 Oracle 示例架构中包含的商业智能架构的帐户。仅当您加载示例架构时才可用。 |
| CTXSYS | Oracle 文本帐户。 |
| DBSNMP | Oracle Enterprise Manager 的管理代理组件用来监视和管理数据库的帐户。 |
| DIP | 目录集成平台 (DIP) 用于将 Oracle Internet Directory 中的更改与数据库中的应用程序同步的帐户。 |
| DVSYS | 有两个角色与此帐户相关联。 Database Vault 所有者角色管理 Database Vault 角色和配置。 Database Vault 帐户管理器用于管理数据库用户帐户。 |
| EXFSYS | 该帐户拥有表达式过滤器架构。 |
| FLOWS_FILES | 该帐户拥有 Application Express 上传的文件。 |
| HR | 拥有包含在 Oracle 示例模式中的人力资源模式的帐户。仅当您加载示例架构时才可用。 |
| IX | 拥有 Oracle 示例架构中包含的信息传输架构的帐户。仅当您加载示例架构时才可用。 |
| LBACSYS | Oracle Label Security 管理员帐户 |
| MDDATA | Oracle Spatial 用于存储地理编码器和路由器数据的模式。 |
| MDSYS | Oracle Spatial 和 Oracle Multimedia Locator 管理员帐户。 |
| MGMT_VIEW | Oracle Enterprise Manager Database Control 使用的帐户。 |
| OE | 拥有 Oracle 示例模式中包含的订单输入模式的帐户。仅当您加载示例架构时才可用。 |
| ORDPLUGINS | Oracle 多媒体用户。 Oracle 提供的插件和第三方插件安装在此架构中。 |
| ORDSYS | Oracle 多媒体管理员帐户。 |
| ORDDATA | 此帐户包含 Oracle Multimedia DICOM 数据模型。 |
| OUTLN | 支持计划稳定性的帐户。计划稳定性使您可以为相同的 SQL 语句维护相同的执行计划。 OUTLN 充当集中管理与存储的大纲关联的元数据的角色。 |
| ORACLE_OCM | 此帐户包含 Oracle 配置管理器使用的配置收集工具。 |
| OWBSYS | Oracle Warehouse Builder 用作其默认信息库的帐户。您必须在安装 Oracle 数据库之后和启动 Warehouse Builder Repository Assistant 之前解锁此帐户。 |
| OWBSYS_AUDIT | Warehouse Builder 控制中心代理使用此帐户访问 OWBSYS 模式中的异构执行审计表。 |
| PM | 拥有 Oracle 示例架构中包含的产品媒体架构的帐户。仅当您加载示例架构时才可用。 |
| SCOTT | Oracle 示例程序和示例使用的帐户。 |
| SH | 拥有 Oracle 示例架构中包含的销售历史架构的帐户。仅当您在 Enterprise Edition 安装期间加载示例架构时才可用。 |
| SI_INFORMTN_SCHEMA | 存储 SQL/MM 静态图像标准的信息视图的帐户。 |
| SPATIAL_CSW_ADMIN_USR | Web 目录服务 (CSW) 帐户。 Oracle Spatial CSW 缓存管理器使用它来将所有记录类型元数据和记录实例从数据库加载到缓存的记录类型的主内存中。 |
| SPATIAL_WFS_ADMIN_USR | Web 要素服务 (WFS) 帐户。 Oracle Spatial WFS 缓存管理器使用它来将所有要素类型元数据和要素实例从数据库加载到缓存要素类型的主内存中。 |
| SYS | 用于执行数据库管理任务的帐户。 |
| SYSMAN | 用于执行 Oracle Enterprise Manager 数据库管理任务的帐户。 |
| SYSTEM | 另一个用于执行数据库管理任务的帐户。 |
| WMSYS | 用于存储 Oracle Workspace Manager 元数据信息的帐户。 |
| XDB | 用于存储 Oracle XML DB 数据和元数据的帐户。 |
数据库的连接
当我们开始学习数据库的时候,通常看到资深的 DBA 以如下这种方式登录数据库。这种方式既不需要输入口令,又可以以最高权限登录数据库,甚至通过任意的用户名及口令都可以以 SYSDBA 身份登录数据库:
1 | $ sqlplus "/ as sysdba" |
很多人会提问,这样的话数据库的安全何在?其实这种情况下,Oracle 采用的是操作系统认证方式,当属于操作系统 DBA 组的用户登录到数据库服务器,那么 Oracle 认为这样的用户就可以被授予以 SYSDBA 身份登录数据库。这时候的用户名和口令就是形同虚设。如果当前用户不属于 DBA 组,那么是不能以 SYSDBA 身份直接登录数据库的。
用户的创建
缺省的,数据库中已经有了两个管理员账号,SYS 和 SYSTEM,这两个用户在创建数据库时被缺省创建,并且被赋予了 DBA 的角色,具有数据库中最高的权限。由于 SYS 用户有管理数据库的所有权限,所以仅允许以 SYSDBA 或者 SYSOPER 身份登录数据库。
1 | # sqlplus sys/oracle |
SYSDBA 和 SYSOPER 是在数据库中执行最高级别操作所需要的管理权限,这些操作包括创建数据库,启停数据库,备份或恢复数据库等。SYSDBA 还包含了完全的数据库管理权限,而 SYSOPER 系统权限允许用户执行基本的数据库管理任务,这两者的权限在 Oracle 的数据库 Vault 组件中得到了进一步地限制和约束,防止 DBA 干扰或访问用户敏感数据。 SYSDBA 的缺省 Schema 是 SYS,而 SYSOPER 的缺省 Schema 是 PUBLIC。
以 SYS 身份连接数据库,创建用户的最简单语法如下:
1
CREATE USER user IDENTIFIED BY password;
这个子句过于简单,省略了空间分配的子句,通常这是不推荐的写法。
1
2
3
4
5
6
7
8SQL> create user lonely identified by test123;
User created.
SQL> select username,default_tablespace,temporary_tablespace from dba_users where username='LONELY';
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
LONELY USERS TEMP这里的 DEFAULT_TABLESPACE 就是用户缺省的数据表空间,TEMPORARY_TABLESPACE 就是用户缺省的用于磁盘排序等操作的临时表空间。
更改缺省数据表空间的语法为:
1
alter database default tablespace <tablespace_name>;
更改缺省临时表空间的语法为
1
alter database default temporary tablespace <tablespace_name>;
由于一直以来都存在着用户空间分配和使用的问题,所以我们建议在创建用户时就为用户指定缺省的表空间。那么更为完善的创建用户的语句应该类似如下的语句:
1
2
3CREATE USER <username> IDENTIFIED BY <password>
DEFAULT TABLESPACE <tablespace_name>
TEMPORARY TABLESPACE <tablespace_name>;修正以下之前的语句,较为完善的用户创建过程应该如下:
1
2SQL> create user lonely identified by test123 default tablespace users temporary tablespace temp;
User created.如果需要删除用户,则可以通过如下命令完成
1
DROP USER <username> CASCADE
但是需要注意,DROP USER 是 DDL 语句,不可回退,所以在删除用户时一定要小心谨慎,确认用户数据确实不再需要时才可以执行删除用户的操作。通常建议,在生产系统中,删除用户前先将用户锁定一段时间,如果确定不再有用户通过该用户访问数据库,则可以安全删除。
以下命令可以将用户账号锁定
1
ALTER USER <username> ACCOUNT LOCK;
口令的管理
失败登录的记录
在 Oracle Database 10g 中,默认的用户管理上有个小的改进,就是对默认的失败登录次数的限制,在用户的 PROFILE 中,FAILED_LOGIN_ATTEMPTS 设置的口令失败尝试次数为 10,如果连续进行了 10 次口令失败的登录尝试,那么用户账号将会被锁定。
1 | SQL> select * from dba_profiles where resource_name='FAILED_LOGIN_ATTEMPTS'; |
可以通过如下的命令恢复之前的无限制
1 | alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited; |
解除限制之后,可以通过如下命令查看某个用户的登录失败次数。
1 | SQL> select name,lcount from user$ where name='LONELY'; |
一旦用户成功登录一次,LCOUNT 的计数会重新清零;
口令大小写的区分
Oracle Database 11gR2 开始,口令默认是区分大小写的。大小写的区分是因为 Oracle 采用了 160bit 的 SHA-1 哈希算法校验,校验的信息记录在 USER$.SPARE4 中:
1 | SQL> select name,password,spare4 from user$ where name='LONELY'; |
这一特性可以通过初始化参数 SEC_CASE_SENSITIVE_LOGON 控制,修改该参数为 FALSE 将取消大小写的区分;
1 | alter system set sec_case_sensitive_logon = false; |
通常建议用户启用这一特性,增强口令安全。
缺省口令的追踪
在 Oracle 11g 中,数据库中还增加了一个 DBA_USERS_WITH_DEFPWD 视图用于显示哪些具有缺省口令的用户,以下是一个查询输出
1 | SQL> select * from DBA_USERS_WITH_DEFPWD; |
这些账号多数处于锁定状态;
权限的授予
继续前面的实验,如果以刚刚创建的用户登录 Oracle,就会收到一个错误提示:
1 | SQL> conn lonely/test123 |
这表示用户 LONELY 缺少一个 CREATE SESSION 的权限。在将 CREATE SESSION 权限授予之后,用户就可以连接到数据库内部:
1 | SQL> grant create session to lonely; |
此时,可以使用 SELECT 查看一些字典信息
1 | SQL> select count(*) from dict; |
查看属于自己的对象,表,视图等
1 | SQL> select count(*) from user_tables; |
如果此时创建数据表,则会收到权限不足的提示
1 | SQL> create table test1(name varchar2(20)); |
此时又要去获得权限
1 | SQL> conn / as sysdba; |
授予用户使用 USERS 表空间的权限
1 | alter user lonely quota 10m on users; |
Oracle 的权限可以分为两类:
- 系统权限,每个系统权限允许用户对 Schema 对象执行一种或一类特定的数据库操作。例如 CREATE SESSION,CREATE TABLESPACE,CREATE TABLE 都是系统权限;数据库中有超过 100 种不同的系统权限,DBA_SYS_PRIVS 可以查询授予用户的系统权限;
- 对象权限,每个对象权限允许用户针对特定对象执行一种特定的行为。例如对某个表的查询权限,如 SELECT ON EYGLE 就是对表 EYGLE 这个对象的查询权限;
常见的各类对象权限可以通过如下方式进行授予:
- 表权限:SELECT,DELETE,UPDATE,INSERT,ALTER
1 | GRANT SELECT ON eygle TO scott; |
- 视图权限:SELECT,DELETE,INSERT,UPDATE
1 | GRANT SELECT ON v_eygle TO scott; |
- 过程,函数,程序包权限:EXECUTE,DEBUG
1 | GRANT EXECUTE ON dbms_sql TO scott; |
GRANT 和 REVOKE 是用来执行权限授予和回收的主要手段。
系统权限的授予情况可以通过 Oracle 的视图 DBA_SYS_PRIVS 来查询,这个视图包含被授予权限的用户信息(GRANTEE)以及具体的权限(PRIVILEGE)信息。如果授予权限时允许用户转授这个权限,那么 ADMIN_OPTION 就为 YES:
1 | SQL> desc dba_sys_privs; |
可以查看到此时 LONELY 用户获得的权限
1 | SQL> select * from dba_sys_privs where grantee='LONELY'; |
进一步可以查询数据库中和 TABLE 有关的权限
1 | SQL> select distinct privilege from dba_sys_privs where privilege like '%TABLE'; |
可以想象,如果数据库中存在大量用户,如果我们将这些权限一一授予这些用户,操作将会及其繁琐,于是 Oracle 设计了一个新的技术:角色(Role)。角色是一系列权限的集合。被授予某个角色的用户将获得这个集合中的所有权限,这大大简化了权限的授予和回收工作。
通常一个用户创建之后,我们授予用户两个角色就足够使用了,这两个角色是 CONNECT 和 RESOURCE。接下来看看这两个角色是哪些权限的集合:
1 | SQL> select * from dba_sys_privs where grantee='CONNECT'; |
通常在权限授予时,应当遵守权限最小化原则,即仅授予用户完成工作所必须的权限,而且绝不过度授予权限。
角色
角色是为了授权方便建立的权限集合,而一旦这个集合的权限超过了用户的最低需求,就可能带来数据库的安全风险。
在数据库内部,用户和角色信息都存储在 USER$ 表中,其中的 TYPE 字段用于标识类型,0 为角色,1为用户:
1 | type# number not null /* 0 = role, 1 = user */ |
表空间
- 创建大文件
1 | SQL> create bigfile tablespace qdmwms datafile '/u01/app/oracle/oradata/orcl/qdmwms.dbf' size 50G autoextend on next 2G maxsize unlimited; |