【DB笔试面试522】在Oracle中,数据库和实例的关系是什么?

题目部分

在Oracle中,数据库和实例的关系是什么?

答案部分

数据库(DATABASE)是一个数据集合,Oracle数据库都将其数据存放在数据文件中。在物理结构上,Oracle数据库必须的3类文件分别是数据文件、控制文件和联机Redo日志文件。在逻辑结构上,Oracle数据库由表空间、段、区和块组成。数据库名称由DB_NAME来标识。

实例(INSTANCE)是操作Oracle数据库的一种手段。它是由OS分配的一块内存(包括SGA和PGA)和一些后台进程(PMON、SMON、LGWR、CKPT、DBWn等)组成的。实例在启动时会读取初始化参数文件(SPFILE或PFILE),获取数据库运行时的参数的值。实例名称由INSTANCE_NAME来标识。

在Oracle 12c之前,一个数据库可以被1个实例(Single Instance,单实例)或多个实例访问或挂载(RAC,集群)。

从Oracle 12c开始,对于非CDB(non-CDB,非容器数据库)类型的数据库而言,它和Oracle 12c之前的数据库没有差别。但是,对于CDB(Container Database,容器数据库)类型的数据库而言,数据库和实例之间是多对多的关系。一个数据库实例可以对应多个数据库(CDB及CDB所包含的PDB(Pluggable Database,可插拔数据库)),一个数据库也可以被多个实例挂载,即CDB类型的数据库。在CDB中,一个实例将与整个CDB关联。如果同一个服务器上有多个数据库,则每个非CDB或CDB都具有各自单独的相异实例。实例不能在非CDB和CDB之间共享。

在Oracle Database 12c中,有三个可能的配置选项:

多租户配置:通常每个CDB有多个PDB,但是任何时候可以一次存放零个、一个或许多PDB,从而利用新体系结构的全部功能,这需要授权的Oracle多租户选项

单租户配置:新体系结构的特殊案例,这不需要授权的选项

非CDB:旧的Oracle Database 11g体系结构

在物理级别,CDB与非CDB一样有一个数据库实例和多个数据库文件。

SYSTEM/SYSAUX:在CDB的数据库环境中,SYSTEM/SYSAUX表空间并不是公用,CDB$ROOT以及每个PDB都拥有自己的SYSTEM和SYSAUX表空间。每个容器都将自己的数据字典存储在相应的SYSTEM表空间(其中包含自己的元数据)中,还有一个SYSAUX表空间。

重做日志文件是整个CDB共有的,其中包含的信息注释有发生更改的PDB的标识。Oracle GoldenGate已进行了增强,以识别CDB的重做日志的格式。在CDB环境中所有的PDB共用CDB$ROOT中的REDO文件,REDO中的条目标识REDO来自那个PDB。在PDB中无法执行ALTER SYSTEM SWITCH LOGFILE命令,只有公用用户在ROOT容器中才可以执行该命令。另外ALTER SYSTEM CHECKPOINT命令是可以在PDB中执行的。

归档:CDB中的所有PDB都共享CDB的ARCHIVELOG模式,以及归档文件,不可以单独为PDB设置自己的归档模式,只有特权用户连接根容器之后才可以启动归档模式。所以,如果想开启或关闭数据库的归档模式,那么只能在CDB级别进行操作。在12.1中,只支持在CDB级别闪回数据库,而在12.2中支持在PDB级别闪回数据库,但是开启和关闭数据库的闪回功能,则只能在CDB级别操作。

控制文件是整个CDB共有的。CDB环境中只有一组控制文件,所有的PDB共用这组公共的控制文件,从任何PDB中添加数据文件都会记录到公共控制文件当中,公用用户连接根容器时,可对控制文件进行管理。

Undo Mode:在12.2之前,每个CDB实例仅有一个UNDO表空间,所有的PDB共用CDB$ROOT中的UNDO文件。在12.1中,所有的在一个实例中的PDB只能共享同一个UNDO表空间。在12.2中它们都有各自的undo表空间了。这种新的管理机制就叫做本地undo模式。在12.2之后的版本中UNDO的使用模式有两种:SHARED UNDO MODE和LOCAL UNDO MODE,顾名思义,LOCAL UNDO MODE就是每个PDB使用自己的UNDO表空间,但当PDB中没有自己的UNDO表空间时,会使用CDB$ROOT中的公共UNDO表空间。本地undo模式为新建数据库的默认模式。

临时文件:每个PDB都有自己的临时表空间,如果PDB没有自己的临时表空间文件,那么,PDB可以使用CDB$ROOT中的临时表空间。根或PDB只能有一个默认临时表空间或表空间组。每个PDB可以具有供该PDB中本地用户或公用用户使用的临时表空间。

•参数文件:参数文件中只记录了根容器的参数信息,没有记录PDB级别的参数信息,在根容器中修改初始化参数,会被继承到所有的PDB中,在PDB中修改参数后,PDB的参数会覆盖CDB级别的参数,PDB级别的参数记录在根容器的pdb_spfile$视图中,但并不是所有的参数都可以在PDB中修改,可以通过v$system_parameter视图的ispdb_modifiable列查看PDB中可修改的参数。

SELECT name FROM v$system_parameter

WHERE ispdb_modifiable = 'TRUE'

ORDER BY name;

•告警日志以及跟踪文件:在CDB中所有的PDB共用一个告警日志和一组跟踪文件,所有的PDB告警信息都会写入同一个告警日志中。

•时区:在CDB环境中可以为CDB以及所有的PDB设置相同的时区,也可以为每个PDB设置单独的时区。

select dbtimezone from dual;

•字符集:在CDB中定义字符集也可以应用于它所含有的PDB中,每个PDB也可以有自己的字符集设置。在12.1中,CDB和PDB的字符集必须一样,但是在12.2中,CDB和PDB的字符集可以不一样。

•根据应用程序的需要,PDB可以在PDB中创建表空间。

•每个数据文件都与名为CON_ID的特定容器相关联。

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

本文分享自微信公众号 - DB宝(xiaomaimiaolhr)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏授客的专栏

Oracle win32_11gR2_database在Win7下的安装与卸载

在安装oracle之前,请检查一下自己的电脑硬件是否复合oracle要求的最低硬件配置:

7930
来自专栏授客的专栏

SQLServer 2005Windows验证如何改为混合模式验证

默认情况下,SQL Server 2005 Express是采用集成的Windows安全验证且禁用了sa登录名,而很多用户使用数据库的时候需要用到sql身份验...

7120
来自专栏授客的专栏

loadrunner 场景设计-制定负载测试计划

你应该对硬件和软件组建,系统配置和典型的使用场景很熟悉。这些应用程序的分析保证你在使用loadrunner进行测试时,创建的测试环境可比较准确的反应应用程序环...

7920
来自专栏Greenplum

gpcrondump与gpdbrestore命令使用

https://gp-docs-cn.github.io/docs/admin_guide/managing/backup-gpcrondump.html

17750
来自专栏科技分享

CGroup 介绍、应用实例及原理描述

CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组 (process groups) 所使用的物力...

15720
来自专栏腾讯云数据库(TencentDB)

关注腾讯云数据库,有机会获得腾讯云1000元代金券

28530
来自专栏授客的专栏

loadrunner 脚本开发-调用java jar文件远程操作Oracle数据库测试

备注:想学oracle的同学,建议在Linux、Unix平台下进行学习,如果觉得安装麻烦,可以加全国软件性能测试交流群:7156436,免费获取Oracle_...

10310
来自专栏changxin7

MySQL总结

2.alter table t1 modify name char(3); 修改类型

15030
来自专栏科技分享

《Debug Hacks》和调试技巧【转】

转自:https://blog.csdn.net/sdulibh/article/details/46462529

12840
来自专栏授客的专栏

排错-安装SQl 2008“为SQL Server代理服务提供的凭据无效的解决方法

在Windows Server 2008安装SQL Server 2008出现的问题:

12020

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励