什么是数据库实例

什么是数据库实例,第1张

简单的理解,就是数据库服务器。数据库要放在服务器上,不同的服务器就是不同的实例,实例可以在不同的机器上,也可以在相同的机器上,在相同的机器上时,实例名不能相同。MSSQL有默认实例,就是机器名。如果再安装第二个数据库实例,一台机器上有两个数据库服务器,必须给它起个名字。

一个实例上有不同的数据库,MSSQL的示例数据库是放在一个具体的实例(服务器上)的。但可以放在不同的实例上,可以连接服务器进行数据的更新 *** 作。

所谓的“实例”,就是一个 SQL Server 数据库引擎

一个 数据库引擎 下面,又可以建立 多个数据库

例如我的计算机,SQL Server 实例的名字是 SQLEXPRESS

这个实例下面,有好几个数据库。

为什么要命名。就是我机器上,很有可能安装了 SQL Server 2005, 又安装了 SQL Server 2008。 2个服务器, 需要不同的名字来区分。

对于 网络请求来说

如果我要访问一个 SQL 数据库

必须提供 机器名 + 实例的名字,才能访问

例如:

C:\Documents and Settings\wzq>sqlcmd -S "localhost\SQLEXPRESS"

1>use stock

2>go

已将数据库上下文更改为 'Stock'。

Oracle数据库,实际上应该是说,我们使用的是Oracle服务server。

Oracle服务server包括有两个部分:

一个部分是Oracle数据库database

一个部分是数据库实例instance。

Oracle数据库database,包括有数据文件、控制文件、重做日志文件,都是一些物理上的文件。

数据库实例instance,包括有数据库后台进程(PMON、SMON、DBWR、LGWR、CKPT等)和内存区域SGA(包括shared pool、db buffer cache、redo log buffer等)。实例是一系列复杂的内存结构和 *** 作系统进程

严格的说:一个Oracle服务,只包括一个Oracle实例和一个数据库(不考虑双机并行等这样的情况)。但是一个实例只能对应一个数据库,一个数据库有可能对应多个实例。除非使用并行O r a c l e服务器选项,否则每个O r a c l e数据库都有一个实例与之相关,一个数据库被唯一的一个实例装载。

数据库与实例之间是1对1/n的关系,在非并行的数据库系统中每个Oracle数据库与一个实例相对应;在并行的数据库系统中,一个数据库会对应多个实例,同一时间用户只与一个实例相联系,当某一个实例出现故障时,其他实例自动服务,保证数据库正常运行。在任何情况下,每个实例都只可以对应一个数据库。

在实际的开发应用中,关于Oracle数据库,经常听见有人说建立一个数据库,建立一个Instance,启动一个Instance之类的话。 其实问他们什么是数据库,什么是Instance,很可能他们给的答案就是数据库就是Instance,Instance就是数据库啊,没有什么区别。在这里,只能说虽然他们Oracle用了可能有了一定的经验,不过基础的概念还是不太清楚。

什么是数据库,其实很简单,数据库就是存储数据的一种媒介。比如常用的文件就是一种,在Oracle10G中,数据的存储有好几种。第一种是文件形式,也就是在你的磁盘中创建一批文件,然后在这些文件中存储信息。第二种就是磁盘阵列形式,这个是什么意思呢,这个就是说明数据库不是存放为某个文件,而是把一个或者多个磁盘格式化成Oracle的一种格式了,等于整个磁盘就是存放Oracle数据库的,不能作为别的用途。这样的优点是存储性能高,因为不再借助别的文件格式了,而是把整个磁盘都成为Oracle最适应的文件系统格式。当然还可能有别的形式,比如网络什么的。不过我们最常用的还是文件格式的,在文件格式中,数据库指的就是那些数据文件,控制文件以及REDO文件等等一系列文件。

而什么是Instance呢,Instance其实就是指的 *** 作系统中一系列的进程以及为这些进程所分配的内存块。在Oracle中,我们可以新建一个Oracle的Instance,这个时候虽然有了进程还有SGA等一系列的内存快,但是这个时候并没有把数据库文件读取进来。所以只是一个实例,在后来,你可以通过命令手动或者自动地把数据库文件加载进我们的数据库Instance中,这个时候的数据库才可以让我们真正的开始访问 *** 作。

所以说,数据库的应用如果想实现,数据库和数据库Instance是缺一不可的,如果只有数据库的那些文件,那么,只能代表数据在这个文件中,但是我们无法直接进行 *** 作。而如果只有数据库Instance,那么我们虽然可以急性 *** 作,但是也不知道 *** 作哪些数据, *** 作生成的数据也无法保存等等。所以,当一个Oracle Instance真正Load了一个Oracle Database了以后,数据库才可以被我们使用。

在这里要注意一点的是,Oracle的实例在启动以后,只能load一次数据库,如果想把数据库与Instance断开,然后再重新挂在一个数据库Instance,那么就需要你首先把数据库Instance进程结束,然后重新建立这个instance的一个进程,再load另外一个数据库。否则肯定要抛除ORA-16169错误,说数据库已经被打开。因为一个数据库Instance在其生存期中最多只能load和打开一个instance。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5812346.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-02-02
下一篇 2023-02-02

发表评论

登录后才能评论

评论列表(0条)

保存