数据库实例和数据库

AKL*_*AKL 4 database-design application-design

我做了一些研究,最后得出了这个结论:

数据库实例 = 进程 + 内存

数据库 =(物理)日志文件 + 控制文件 + 数据文件。

  1. 这种理解是否正确?
  2. 一个应用程序可以使用同一个数据库的多个数据库实例吗?
  3. 数据库中的一个表可以同时被多个数据库实例使用吗?

谢谢。

Kit*_*tet 9

从技术上讲,实例驻留在内存中,而数据库(物理文件)驻留在磁盘上。可以有一个没有数据库的实例(一个例子是在您创建数据库之前启动的实例)。也可以有一个没有实例的数据库(例如,数据库文件驻留在磁盘上但实例没有运行,或者文件复制到其他位置,沿着这些方向)。通常,您通过将客户端连接到它的实例来使用数据库,以便对其中包含的数据进行一些工作。因此,一个实例在启动时会将自己与一个或多个数据库相关联(例如 Firebird - 一个服务器进程可用于连接到多个数据库)。

第二个问题:仅在某些高可用性环境中,即 Oracle 上的 RAC,其中多个实例集群以服务同一个数据库。这对最终用户是透明的,所以实际上不,它不能。如果您谈论的是非集群配置,则不 - 没有两个实例可以使用同一组数据库文件,因此任何应用程序都不能使用多个连接到同一组数据库文件的实例。至少在我知道的 RDBMS 中不是。然而,从理论上讲,应用程序可以使用两个实例为同一数据库的两个不同副本提供服务,为什么不呢。只有我看不到这样做的现实理由。

第三个问题:已经回答了。除非是某种 HA 环境,否则任何数据库都不能由两个实例提供服务。

编辑关于对象类型

这是select distinct object_type from dba_objects对我的 Ora 10g的查询的结果,它甚至让我自己感到惊讶:

CONSUMER GROUP, INDEX PARTITION, SEQUENCE, QUEUE, SCHEDULE, TABLE PARTITION, RULE, PROCEDURE, OPERATOR, LOB PARTITION, WINDOW, LOB, PACKAGE, PACKAGE BODY, LIBRARY, RULE SET, PROGRAM, TYPE BODY, CONTEXT, TRIGGER, JOB CLASS, UNDEFINED, DIRECTORY, MATERIALIZED VIEW, TABLE, INDEX, SYNONYM, VIEW, FUNCTION, WINDOW GROUP, CLUSTER, TYPE, RESOURCE PLAN, EVALUATION CONTEXT, JOB