一、Oracle 体系结构
1、Oracle 体系结构概述
Oracle体系结构中的主要组件,包括实例、用户进程、服务器进程、数据文件及其他文件,如参数文件、口令文件和归档日志文件等。实例和数据库是Oracle数据库体系结构的核心组成部分,也是最重要的两个概念,DBA一个很重要的工作就是维护实例和数据库本身的正常工作。
1、实例
Oracle 实例是后台进程和内存结构的集合,必须启动实例才能访问数据库中的数据。Oracle实例启动时,将分配一个系统全局区(SGA)并启动一系列Oracle后台进程。Oracle实例有两种类型:单进程实例和多进程实例。单进程Oracle实例使用一个进程执行Oracle的全部操作,在单进程环境下的Oracle实例仅允许一个用户可存取。多进程Oracle实例(又称多用户Oracle)使用多个进程来执行Oracle的不同部分,对于每个连接的用户都有一个进程。
2、数据库
数据库是数据的集合,物理上是指存储数据库信息的一组操作系统文件,每个数据库有一个逻辑结构和一个物理结构。物理结构是指构成数据库的一组操作系统文件,主要由三种类型文件组成:数据文件、控制文件和重做日志文件。数据库的逻辑结构是指数据库数据的逻辑存储结构(如表空间、段等)和模式对象(如表、视图等)。
3、可插拔数据库
从 Oracle 12c版本开始,Oracle引入了可插拔数据库的概念,可插拔是为云计算而生。可插拔的结构由一个容器数据库(Containe Database,CDB)和若干个可组装数据库(Pluggable Database,PDB)组成,每个PDB对外可充当一个独立的数据库供应用程序使用,它可以包含自己的数据文件但是所有的PDB共享CDB的控制文件以及日志文件。所谓的可插拔,意味着PDB可以像USB一样随时插入CDB中,不用了也可以随时拔下来。一个CDB中最多可以插入250个PDB,在PDB中,seedPDB为模板PDB,它为新创建的PDB提供模板。其他的PDB可以根据需要创建、删除。可插拔功能可以加速数据库的部署,给一个CDB打补丁就可以将所有的更新同步到其上的所有PDB中。
2、Oracle 服务器
Oracle服务器主要由实例和数据库文件组成,也就是我们常说的数据库管理系统(Database Management System,DBMS)。
Oracle服务器除了维护实例和数据库文件外,还在用户建立与服务器的连接时启动服务器进程并分配PGA(Program Global Area,程序全局区)。
3、Oracle 存储结构
Oracle的存储结构分为物理结构和逻辑结构,这两种存储结构既相互独立又相互联系。
物理结构主要描述Oracle数据库的外部存储结构,即在操作系统中如何组织、管理数据。
逻辑结构主要描述Oracle数据库的内部存储结构,即从逻辑概念上描述在Oracle数据库中如何组织、管理数据。
1、物理结构
1、主要文件
1、数据文件。数据文件(Data File)的扩展名通常是.dbf.是物理存储Oracle数据库数据的文件。数据文件的特点:
①每个数据文件只与一个数据库相联系;
②一个表空间可包含一个或多个数据文件;
③一个数据文件只能属于一个表空间。
2、重做日志文件。重做日志文件(Redo Log File)的扩展名是.log,它记录了对数据的所有更改信息,并提供了一种数据恢复机制,确保在系统崩溃或其他意外出现后重新恢复数据库。
在Oracle数据库中,重做日志文件是成组使用的,每个重做日志文件组可以有一个或多个重做日志文件。在工作过程中,多个重做日志文件组之间循环使用,当一个重做日志文件组写满后,会转向下一个日志文件组。重做日志文件用于记录数据库变化,是用户的事务处理日志。
3、控制文件。控制文件(Contol File)的扩展名是.ctl,是一个二进制文件。控制文件中存储的信息很多,其中包括数据文件和重做日志文件的名称和位置。控制文件是数据库启动及运行所必需的文件。当Oracle读写数据时,要根据控制文件的信息查找数据文件。
由于控制文件的重要性,一个数据库至少要有两份控制文件。Oracle12c默认包含两个控制文件,各个控制文件内容相同,从而可以避免因为一个控制文件的损坏而导致无法启动数据库的情况出现。
控制文件中记录了以下关键信息:
①数据文件的位置及大小;
②重做日志文件的位置及大小;
③数据库名称及创建时间;
④日志序列号。
2、其他文件
其他文件有参数文件、归档日志文件、口令文件等。
2、逻辑结构
1、表空间
每个Oracle数据库都是由若干个表空间构成的,用户在数据库中建立的所有内容都被存储到表空间中。一个表空间可以有多个数据文件,但一个数据文件只能属于一个表空间。与数据文件这种物理结构不同,表空间属于数据库的逻辑结构。
在每个数据库中,都有一个名为“SYSTEM的表空间,即系统表空间,还会有SYSAUX、UNDO USERS等表空间,这些都是在创建数据库时自动创建的。管理员可以创建自定义的表空间并分配给指定用户,也可以为表空间增加和删除数据文件。
表空间有以下三类。
(1)永久性表空间:一般保持基表、视图、过程和索引等的数据。SYSTEM、SYSAUX、USERS表空间是默认安装的。
(2)临时性表空间:只用于保存系统中短期活动的数据,如排序数据等。
(3)撤销表空间:用来帮助回退未提交的事务数据,已提交了的数据在这里是不可以恢复的。
一般不需要创建临时性表空间和撤销表空间,除非把它们转移到其他磁盘中以提高性能。
表空间的目的如下:
①对不同用户分配不同的表空间,对不同的模式对象分配不同的表空间,方便对用户操作和对模式对象的管理;
②可以将不同数据文件创建到不同的磁盘中,有利于管理磁盘空间、提高I/O性能、备份和恢复数据等。
一般在完成Oracle系统的安装并创建Oracle实例后,Oracle系统自动建立SYSTEM、SYSAUX.USERS等多个表空间。
下面分别介绍SYSTEM表空间、SYSAUX表空间、USERS表空间和TEMP表空间。
(1)SYSTEM表空间:用于存放Oracle系统内部表和数据字典的数据,如表名、列名、用户名等。不建议将用户创建的表、索引等对象存放到SYSTEM表空间中。
(2)SYSAUX表空间:作为SYSTEM的辅助表空间,用于存放各种数据库工具(如企业管理器、StatsPack、LogMiner等)用到的数据;还用于存放各模式的对象数据,如智能代理用户DBSNMP等,这些模式在数据库安装完成后就建立了相应的对象并都存放在SYSAUX表空间中。
(3)USERS表空间:通常作为用户使用的表空间,可以在这个表空间上创建各种对象,如表、索引等。
(4)TEMP表空间:Oracle系统用于存放临时数据的特殊表空间。例如,当操作中需要进行排序时,Oracle系统就将排序的数据临时存放在该表空间内。排序处理完成后即可释放排序数据所占用的空间,因此称之为临时表空间。
除了Oracle系统默认创建的表空间外,用户可根据应用系统的规模及其所要存储的对象类型创建多个表空间,以区分用户数据和系统数据。
创建表空间属于数据定义语言,其语法格式如下:
SQL> CREATE TABLESPACE tablespacename
DATAFILE 'filename' [ SIZE integer [ K | M ] ]
[AUTOEXTEND [ OFF | ON ] ];
在语法中
- tablespacename是表空间名称。
- DATAFILE指定组成表空间的一个或多个数据文件,当有多个数据文件时使用逗号分隔。
- filename是表空间中数据文件的路径和名称。
- SIZE指定文件的大小,用K指定千字节大小,用M指定兆字节大小。
- AUTOEXTEND子句用来启用或禁用数据文件的自动扩展。若设置AUTOEXTEND参数为ON,则空间用尽会自动扩展。当设置AUTOEXTEND参数为OFF时很容易出现表空间剩余容量为0.造成数据不能存储到数据库中的情况出现。
2、段
段(Segment)存在于表空间中,是一种指定类型的逻辑存储结构,段由一组区组成。按照段中所存储数据的特征,以及优化系统性能的需要,段可分成四类,即数据段、索引段、回退段、临时段。例如,对于每个非聚集表有一个数据段,表的所有数据存储在该段;而对于每个索引都有一个索引段。
3、区
区(Extent)是磁盘空间分配的最小单位。磁盘按区划分,每次至少分配一个区。区由连续的数据块组成。段主要由一个或多个区构成,当段创建后,它至少包含一个区。当段中的所有空间都完全使用时,系统将自动为该段分配一个新区。区不能跨数据文件存在,只能存在于一个数据文件中。
4、数据块
数据块(Data Block)是数据库中最小的数据组织单位与管理单位。Oracle数据库中的数据存储于数据块中。数据块是Oracle服务器所能读取或写入的最小存储单元。Oracle服务器以数据块为单位管理数据文件的存储空间。数据块的取值范围为2~64KB,其默认大小与Oracle版本有关。
5、模式
模式(Schema)是数据库对象(又称模式对象)的集合。模式对象包括表、视图、索引、同义词、序列、过程和程序包等。每创建一个用户,Oracle会自动创建一个与用户名相同的模式,因此,模式又称用户模式。用户登录后,默认访问的是与自己的名称相同的模式中的数据库对象。
4、Oracle 内存结构
内存结构是Oracle数据库体系中最为重要的一部分,内存也是影响数据库性能的第一要素。
Oracle内存存储的主要内容如下:
- 程序代码(PL/SQL、Java)。
- 已经连接的会话的相关信息,包括当前所有活动会话和非活动会话。
- 程序运行时必需的相关信息,如查询计划。
- Dracle进程之间通信和共享的信息,如锁。
按照内存使用方法的不同,Oracle数据库的内存又可以分为SGA、PGA和UGA(User Global Area,用户全局区)。
SGA:所有用户都可以访问的实例的共享内存区域。数据块、事务处理日志、数据字典信息等都存储在SGA中。
PGA:一类非共享的内存,专用于特定的服务器进程,并且只能够由这个进程访问。
UGA:为用户进程存储会话状态的内存区域。根据用户数据库是配置为专用服务器模式,还是配置为共享服务器模式,UGA可以作为SGA或者PGA的一部分。它为用户会话存储数据。
1、SGA
Oracle实例的SGA用来存储数据库信息,并由多个数据库进程共享。当数据库实例启动时,SGA的内存被自动分配。SGA是数据库中占用服务器内存最大的一个区域,也是影响数据库性能的一个重要指标。SGA按其作用不同,可分为共享池、数据缓冲区、重做日志缓冲区,大池和Java池等。
1、共享池
共享池是对SOL、PL/SQL程序进行语法分析、编译、执行时用到的内存区域。共享池由库缓存和数据字典缓存组成。
- 库缓存含有最近执行的SQL、PL/SQL语句的分析码和执行计划
- 数据字典缓存含有从数据字典中得到的表、索引,列定义、权限信息和其他一些数据库对象的定义。如果Oracle缓存了这些信息,那么无疑是缩短了查询的响应时间。
2、数据缓冲区
数据缓冲区用于存储从磁盘数据文件中读入的数据,供所有用户共享。修改数据时,首先要从数据文件中取出数据,存储于数据缓冲区中。修改的数据,插入的数据都被存储于数据缓冲区中,修改完成和其他条件满足时,数据才被写入数据文件中。
Oracle服务器进程在处理一个查询时,首先查找内存中是否存在所需的数据块。如果在数据缓冲区中没有找到需要的块,服务器进程就从数据文件中读取此块,并保存在缓冲区中。当后续的请求需要读取这些块时,便可以在内存中找到,因此这些请求不需要从磁盘中读取,从而提高了读取速度。数据缓冲区的大小对数据库的读取速度有直接的影响。
3、重做日志缓冲区
当用户执行了如INSERT、UPDATE、DELETE、CREATE、ALTER或DROP等操作后,数据发生了变化,这些变化了的数据在写入数据缓存之前先要写入重做日志缓冲区,同时变化之前的数据也放入重做日志缓存,这样在数据恢复时Oracle就知道哪些资源需要提交,哪些资源需要撤回。相对于数据缓冲区,日志缓冲区对数据库的性能影响较小。
4、大池
在SGA中,大池是一个可选的缓冲区,管理员可以根据需要对其进行配置。在大规模输入、输出及备份过程中也需要大池作为缓存空间,如大数据操作、数据库备份与恢复之类的操作
5、Java池
在SGA中,Java池也是一个可选的缓冲区,但是在安装Java或者使用Java程序时必须设置Java池,用于编译Java语言编写的指令
2、PGA
PGA不是实例的一部分,它包含单个服务器进程或单个后台进程所需的数据和控制信息。PGA是在用户进程连接到数据库并创建一个会话时自动分配的,该区内保留了每个与Oracle数据库连接的用户进程所需的内存。在一个用户会话结束后,PGA将释放。
2、Oracle 进程结构
Oracle中有几种不同类型的进程:用户进程、服务器进程、后台进程。
- 用户进程:在数据库用户请求连接Oracle服务器时启动。
- 服务器进程:在用户建立会话并连接Oracle实例时启动。
- 后台进程:在Oracle实例启动时启动。
用户进程是一个需要与Oracle服务器进行交互的程序。当数据库用户运行一个应用程序准备向数据库服务器发送请求时,即创建了用户进程。例如,用户启动数据库工具SQL*Plus时,系统将自动建立一个用户进程。
服务器进程用于处理连接到该实例的用户进程的请求。当用户建立与数据库的连接时,即产生服务器进程。服务器进程和用户进程通信并为所连接的用户请求服务。服务器进程直接与Oracle数据库交互,实现调用和返回结果的目的。服务器进程既可以处理一个用户进程的请求,也可以处理多个用户进程的请求。
在Oracle数据库中,为了使系统性能更好地协调多个用户,实例系统中使用的一些附加进程称为后台进程。这些后台进程存在于操作系统中,在实例启动时自动启动,其中有五个进程是必须启动的,否则数据库实例无法启动成功。这五个重要且必需的后台进程为进程监控(Process Monitor,PMON)进程、系统监控(System Monitor,SMON)进程、数据写入(Database Writer,DBWR)进程、日志写入(Log Writer,LGWR)进程、检查点(Check Point,CKPT)进程。
1、PMON进程
PMON进程在用户连接意外中断后执行资源清理工作,包括下列任务
- 释放所有当前挂起的锁。
- 回滚用户当前事务处理。
- 释放用户当前使用的资源。
- 监控服务器进程和其他后台进程,出现故障时重启它们。
2、SMON进程
SMON进程执行下列任务:
- 在实例启动时执行实例恢复。实例恢复包括三个步骤:
- 前滚以恢复未写入数据文件但已记入联机日志文件的数据:
- 打开数据库,以便用户能登录并访问数据:
- 回滚未提交的事务处理。
- 整理数据文件的自由空间。
- 释放不再使用的临时段。
3、DBWR进程
DBWR进程执行下列任务:
- 管理数据缓冲区,以便能找到空闲的缓冲区读入数据文件的数据。
- 将所有修改后的缓冲区数据写入数据文件。
- 使用LRU(Le at Re entlyUsed最近最少使用)算法将最近使用过的块保留在内存中。
- 通过延迟写来优化磁盘I/O读写。
4、LGWR进程
LGWR进程负责将重做日志缓冲区中的日志数据写入日志文件组。数据库在运行时,如果对数据进行修改,则产生日志信息,日志信息首先产生于重做日志缓冲区中。此缓冲区按照“先进先出”的原则进行操作,当日志信息满足一定条件时,由LGWR进程将日志数据写入日志文件。系统通常有多个日志文件,日志写入进程以循环的方式将数据写入文件。
5、CKPT进程
CKPT进程是确保数据缓冲区中所有修改过的数据块都写入数据文件的机制。当检查点完成后,CKPT进程负责更新数据文件头和控制文件,保存检查点信息,以保证数据库日志文件和数据文件同步。在数据库恢复时只需要找到CKPT保存的最后一次检查点,就可以根据它确定在日志文件中恢复数据的开始位置,然后重新执行其之后的日志记录即可。
6、ARCn进程
ARCn进程即归档日志进程,是一个可选进程,只有在打开日志归档时才有该进程。该进程的主要作用是发生日志切换时将写满的联机日志文件复制到归档目录。
二、表空间管理
1、创建表
SQL> create tablespace tbs_work # 创建一个自动增长表空间tbs_work
2 datafile '/u01/app/oracle/oradata/orcl/worktbs01.dbf' # 数据文件名为worktbs01.dbf,且位于‘’
3 size 10M autoextend on; # 大小自动扩展到10M
表空间已创建。
2、调整表空间大小
1、更改数据文件的大小
SQL> alter database datafile # 修改数据
2 '/u01/app/oracle/oradata/orcl/worktbs01.dbf' # 数据文件路径
3 resize 80M; # 更改数据文件大小为80M
数据库已更改。
2、向表空间内添加数据文件
SQL> alter tablespace tbs_work # 修改表空间tbs_work
2 add datafile '/u01/app/oracle/oradata/orcl/worktbs02.dbf' # 添加数据文件worktbs02.dbf
3 size 20M autoextend on; # 大小自动扩展到20M
表空间已更改。
3、改变表空间的读写状态
SQL> alter tablespace tbs_work read only; # 使表空间只读
表空间已更改。
SQL> alter tablespace tbs_work read write; # 使表空间可读写
表空间已更改。
4、删除表空间
SQL> drop tablespace tbs_work including contents; # 删除表空间
表空间已删除。
三、CDB与PDB的基本操作
和之前版本的Oracle不同,Oracle12c可以作为单个数据库使用(通过在安装时取消勾选“创建为容器数据库”复选框)。也可以根据企业需求,提供若干个可插拔PDB数据库。每个PDB可以由不同的DBA维护。
1、连接CDB以及相关的查询
$ sqlplus /as sysdba # 以sys用户登录数据库
SQL> startup # 启动数据库
SQL> show con_name # 查询当前所在的容器
CON_NAME
------------------------------
CDB$ROOT # 代表当前在CDB下面
SQL> show pdbs; # 查询数据库的所有容器
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB MOUNTED # 状态为mounted(并没有open)
SQL> alter pluggable database orclpdb open; # CDB下修改可插拔库orclpdb为打开状态
插接式数据库已变更。
SQL> alter session set container=orclpdb; # 在CDB下切换会话到PDB中
会话已更改。
SQL> show con_name # 查看当前位置已经位于ORCLPDB中
CON_NAME
------------------------------
ORCLPDB
2、从CDB切换到PDB以及相关操作
SQL> shutdown immediate # 在PDB中关闭可插拔数据库
插接式数据库已关闭。
SQL> startup # 在PDB中打开可插拔数据库
插接式数据库已打开。
SQL> alter session set container=cdb$root; # 切换会话到CDB中
会话已更改。
SQL> show con_name # 查看当前位置
CON_NAME
------------------------------
CDB$ROOT
三、用户管理
在创建一个新数据库时,Oracle将创建一些默认数据库用户,如SYS、SYSTEM等用户。SYS和SYSTEM用户都是Oracle的管理用户。如果在安装过程中选择安装示例数据库,则会自动创建HR用户,HR用户是Oracle数据库的一个示范用户,也可以根据需求导入其他示例数据库。
1、SYS
SYS用户是Oracle中的一个超级用户,主要用来维护系统信息和管理实例。数据库中所有数据字典和视图都存储在SYS模式中。数据字典存储了用来管理数据库对象的所有信息,是Oracle数据库中非常重要的系统信息。SYS用户只能以SYSOPER或SYSDBA角色登录系统。
2、SYSTEM
SYSTEM用户是Oracle中默认的数据库管理员,它拥有DBA权限。该用户模式中存储了Oracle管理工具使用的内部表和视图。通常通过SYSTEM用户管理Oracle数据库的用户、权限和存储等,不建议在SYSTEM模式中创建用户表。SYSTEM用户不能以SYSOPER或SYSDBA角色登录系统,只能以默认方式(数据库身份验证的方式)登录。
3、自定义用户
Oracle 12c支持创建自定义用户,由于PDB的引入,自定义用户的范畴和之前版本有所不同。在CDB模式下,用户分为两种,分别是公用用户(Common User)和本地用户(Local User),公用用户可以在CDB及PDB中使用,而本地用户只能存在于PDB中。在CDB环境中,不允许创建本地用户。Oracle规定,在CDB中创建公用用户时,用户名必须以c##开头。
通常情况下,出于安全考虑,对于不同用途的数据表需要不同的访问权限,因此,就需要创建不同的用户。Oracle中的CREATEUSER命令用于创建新用户。每个用户都有一个默认表空间和一个临时表空间。如果没有指定,Oracle就将USERS设为默认表空间,将TEMP设为临时表空间。
创建用户的语法格式如下:
SQL> CREATE USER user
IDENTIFIED BY password
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace]
[QUOTA {integer [K|M] | UNLIMITED}ON tablespace
[QUOTA {integer [K|M] | UNLIMITED}ON tablespace ] ...]
[PASSWORD EXPIRE];
- user是用户名。用户名必须是一个标识符。
- password是用户口令。口令必须是一个标识符。从Oracle11g开始,口令是大小写敏感的。
- DEFAULT或TEMPORARY TABLESPACE为用户确定默认表空间或临时表空间。
- QUOTA {integer [KIM] | UNLIMITED)ON tablespace 设置该用户对于表空间的配额,即表空间的多大空间给该用户使用,参数UNLIMITED说明没有限制,KM是配额单位。
- PASSWORD EXPIRE 设置用户密码,用户密码在用户第一次使用时作废,需要重新设置该用户密码。例如,数据库管理员会使用初始密码创建用户,当用户第一次登录时必须修改密码,以确保密码的安全。
SQL> create user c##zhangsan # 创建zhangsan的用户(在PDB中创建用户(不需要加c##))
2 identified by pwd123 # 密码
3 default tablespace tbs_work # 默认表空间
4 temporary tablespace temp # 临时表空间
5 quota unlimited on tbs_work # 对默认表空间使用没有限制
6 password expire; # 第一次登录需要改密码
用户已创建。
SQL> alter user c##zhangsan identified by 123456; # 修改用户的密码
用户已更改。
SQL> drop user c##zhangsan cascade; # 删除c##zhangsan用户
用户已删除。
Oracle 中的 DROP USER 命令可用于删除用户,但当用户拥有模式对象时则无法删除用户,此时必须使用CASCADE选项来删除用户及用户模式对象。
四、数据库权限管理
权限是执行某种类型的SQL语句或者存取其他用户数据库对象的权力。在Oracle中,权限分为系统权限与对象权限两类。
1、系统权限
系统权限是指在数据库中执行某种系统级别的操作,或者针对某一类的对象执行某种操作的权力。例如,在数据库中创建表空间的权力,或者在数据库中创建表的权力,都属于系统权限。
常见的系统权限如下。
- CREATE SESSION:连接到数据库
- CREATE TABLE:创建表
- CREATE VIEW:创建视图
- CREATE SEQUENCE:创建序列
2、对象权限
对象权限是指针对某个特定的模式对象执行操作的权力。只能针对模式对象来设置和管理对象权限,包括数据库中的表、视图、序列、存储过程等。
Oracle 数据库用户有两种获得权限的途径:①直接向用户授予权限;②将权限授予角色,再将角色授予一个或多个用户,使用角色能够更加方便和高效地对权限进行管理。所以数据库管理员通常使用角色向用户授予权限,而不是直接向用户授予权限。在Oracle数据库系统中预定义了很多角色,其中最常用的主要有CONNECT角色、RESOURCE角色、DBA角色等。DBA角色具有所有的系统权限,并且可以对其他用户进行角色授权。
Oracle中常用的系统预定义角色如下。
- CONNECT:拥有连接数据库的权限。
- RESOURCE:拥有创建表、触发器、过程等权限。
- DBA:数据库管理员角色,拥有管理数据库的最高权限。一个具有DBA角色的用户可以授权任何其他用户甚至其他DBA权限,这是很危险的,因此不要轻易授予该角色。
新创建的用户必须授予一定的权限才能进行相关数据库操作,首先要授予其CREATE SESSION权限,使其可以访问数据库。授权通过GRANT语句,取消授权则通过 REVOKE语句。
SQL> grant connect,resource to c##zhangsan; # 授予c##zhangsan用户的connect和resource两角色
授权成功。
SQL> conn c##zhangsan/123456 # 验证权限
已连接。
SQL> create table teacher(id int,name varchar(10));
表已创建。
SQL> insert into teacher values (1,'tom');
已创建 1 行。
SQL> select * from teacher;
ID NAME
---------- ------------------------------
1 tom
SQL> revoke connect,resource from c##zhangsan # 撤销c##zhangsan用户的权限
撤销成功。
数据库用户安全设计原则如下:
- 数据库用户权限授权按照最小分配原则。
- 数据库用户可分为管理、应用、维护、备份四类用户。
- 不允许使用sys和system用户建立数据库应用对象。
- 禁止对普通用户授予dba权限。
- 对查询用户只能开放查询权限。
- 对新建用户初次登录数据库时强制修改密码。
五、导入数据
$ sqlplus / as sysdba
SQL> create user c##scott identified by scott default tablespace users temporary tablespace temp quota unlimited on users; # 创建用户c##scott,在PDB中创建用户不需要加c##
SQL> grant connect,resource to c##scott; # 用户授权
SQL> @/tmp/test.sq1 # 导入脚本文件
SQL> conn c##scott/scott # 切换到用户c##scott
SQL> show user; # 查看当前的用户
USER is "C##SCOTT"
SQL> col tname for a10 # 格式化输出,让一行中显示所有的列,调整tname列的宽度为10
SQL> select * from tab; # 查询当前用户下的所有的表
SQL> col empno for 9999 # 格式化输出,empno列为数字,9999代表宽度为4
评论区