我做了一些研究,最后得出了这样的结论:
数据库实例=进程+内存数据库=(物理)日志文件+控制文件+数据文件。
谢谢。
发布于 2014-07-08 20:44:27
我猜你说的是甲骨文。请参阅我对这中有关模式和数据库之间的区别的问题的答复。还请参阅我对Phil关于使用不在同一模式中的表的评论-是的,这是可能的,但不是一个理想的解决方案。
编辑回应OP的评论
是的,您刚才说的是它在关系数据库中的工作方式--这就是甲骨文、微软服务器和MySQL的特点(尽管它不是__true__ RDBMS )。
以你提出问题时的措辞回答你的问题:
你说过:
Database instance = processes + memory是的,“实例”可以被看作是这样的--主要是Oracle术语。其他人可能称它为“服务器”或(不幸的是!)“数据库”。最好是区分实例(在cpu/内存结构中)和物理文件。
Database = (physical) log files + control files + data files.数据库(在现代的RDBMS意义上)是你所写的,除了你遗漏了实际的数据(+日志文件,控制文件,初始化参数(通常是文本文件)。
不幸的是,在现代术语中,事情变得非常混乱。
我会使用(如果我试图非常清楚)术语"system“(甚至运行系统)软件(实例)+数据库(磁盘上的文件)。
请注意,这些术语可能会被滥用和破坏,在一般使用中没有一个普遍适用的明确术语。
回答这个问题
如果我错了,请更正,表被创建并存储在数据库中,数据库实例使用数据库中的这些表进行插入、删除、查询等操作。
在这方面,您是绝对正确的--至少对于RDBMS来说是这样。
发布于 2014-07-08 20:47:31
从技术上讲,实例驻留在内存中,数据库(物理文件)驻留在磁盘上。可以有没有数据库的实例(在创建数据库之前,示例就是已启动的实例)。也可以有一个没有实例的数据库(这是驻留在磁盘上的数据库文件,但是实例没有运行,或者文件被复制到其他位置,类似于这些代码)。通常,您通过将客户端连接到它的实例来使用数据库,以便对其中包含的数据做一些工作。因此,一个实例在启动时与一个或多个数据库相关联(例如,一个服务器进程可用于连接多个数据库)。
第二个问题:只有在某些高可用性环境中,即Oracle上的RAC环境中,多个实例被群集以服务于同一个数据库。这对最终用户来说是透明的,所以实际上是不行的。如果你说的是非集群配置,那么没有任何两个实例可以使用相同的数据库文件集,因此没有一个应用程序可以使用多个连接到同一组数据库文件的实例。至少在我所知道的RDBMS中没有。但是,理论上,一个应用程序可以使用两个实例来服务同一个数据库的两个不同的副本,为什么不可以呢?只是我看不出现实世界的理由。
第三个问题:已经回答了。任何数据库都不能由两个实例提供服务,除非它是某种HA环境。
关于对象类型的
这是对我的Ora10g的select distinct object_type from dba_objects查询的结果,就连我自己也感到惊讶:
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
https://dba.stackexchange.com/questions/69989
复制相似问题