oracle数据库与实例的区别与联系

本文参考相关博客与文档,对oracle数据库和实例做一个总结。

 

oracle数据库与实例是两个截然不同的概念,这一点与其他关系型数据库区别很大。

简单来讲,实例是数据库的一个快照;

打个比喻,数据库就是一个相片底片,实例就是相纸,一个底片可以冲多个相纸,但一张相纸最多冲一个底片。

 

1  名词解释:

 

数据库(database):

Oracle中的数据库包含了一组操作系统文件。Oracle数据库表示包含多个存在于磁盘上的用来保存数据的文件的一个单个的集合名词。 组成Oracle数据库的文件可以分成三个类型:数据文件(data file)、重做日志文件(redo log file)和控制文件(control file)。数据文件保存数据,Oracle中可以存在任意数量的数据文件;重做日志文件用来保存对数据更改的记录,在系统恢复阶段需要用到;控制文件是一些特别的小文件,用来保存一些至关重要的关于数据库的信息,没有这个文件的话,实例就无法打开数据库。除了数据文件、重做日志文件、控制文件之外,数据库还包含参数文件(parameter file)、密码文件(password file)和可选的归档日志文件(archive log files)。

 

实例(instance):

一组Oracle 后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。这里可以维护易失的、非持久性内容(有些可以刷新输出到磁盘)。就算没有磁盘存储,数据库实例也能存在。也许实例不能算是世界上最有用的事物,不过你完全可以把它想成是最有用的事物,这有助于对实例和数据库划清界线。

 

2 关系:

 

在单实例数据库中,一个数据库对应一个实例,在集群RAC情况下,共享数据库文件时,一个数据库是可以被多个实例同时使用的。也就是说一个数据库可以被一个或多个实例使用,但是一个实例最多只能装载和打开一个数据库。

 

安装oracle时,选择单实例数据库时通常会安装一个实例——数据库对(当然可以装多对),而且他们的名字默认相同(也就是实例和数据库名字相同),当然也可以被设置为不相同,但不管相不相同,他们的联系是通过xxx/pfile/init.ora初始化文件(参数文件)联系的。因为xxx就是实例的名字,而init.ora中的db_name,则记录相应数据库的名字。

 

在oracle中查看数据库和实例的语句:

实例:

SELECT INSTANCE_NAME, HOST_NAME, VERSION,STARTUP_TIME, DATABASE_STATUS FROM V$INSTANCE;

数据库:

SELECT NAME, DATABASE_ROLE, CREATED FROM V$DATABASE;

 

3 实例的作用:

 

实例是我们向数据库读写数据或读数据的媒介,在Oracle单实例数据库中,只有一个实例,只能通过当前实例访问数据库,但是在RAC数据库中,一个数据库可以产生多个实例,当前数据库就能被所有的当前的实例所打开,并且当一个实例挂掉,其他实例也能正常的运行,从而保证了数据库的稳定。

 

4 数据库启动过程介绍:

 

Oracle系统启动时,首先在内存中创建数据库实例,然后由实例找到保存在磁盘中的数据库,最后打开数据库让用户操作。当系统关闭时,实例会从内存中清除掉:整个内存结构和后台进程都会消失,但是数据库依然存在于磁盘上,只是处于关闭的状态。之前也说过,Oracle实例可以在不打开数据库的情况下运行——这是与SQL Server数据库最大的不同,SQL Server实例是不能够离开系统数据库而运行的。不过和SQL Server一样Oracle数据库在实例没有启动的情况下也是不能访问的。

sysdba,是管理Oracle实例的,它的存在不依赖于整个数据库完全启动,只要实例启动了,他就已经存在,以sysdba身份登录,装载数据库、打开数据库。只有数据库打开了,或者说整个数据库完全启动后,DBA角色才有了存在的基础!


下面演示启动xxx实例,挂接数据库,打开数据库,关闭数据库、卸载数据库、关闭实例的过程。

1、保持所有oracle相关服务关闭,监听关闭。

2、启动监听。

命令行:lsnrctl start

注意:使用管理员运行cmd,否则会没有权限启动。

3、启动oracle服务

命令行:net start oracleservicexxx

其中xxx是数据库实例的名字。

这里假定只是启动了oracle服务,即oracle DBMS,没有启动相关实例。

启动oracle服务时也可以同时启动实例,可以通过设置进行修改。

4、设置需要启动的实例名。

命令行:set oracle_sid=xxx

注:根据当前实例名,启动该实例。

5、登录sys,管理实例及数据库。 

命令行:connect sys/pwd as sysdba

pwd是sys用户的密码,这时以sysdba的角色连接到oracle的空闲实例。

此时说明了在不启动实例的时候即可连接oracle,sys用户是用于管理实例和数据库的。

7、启动实例(不加载数据库)

命令行: startup nomount 

此时则启动了xxx实例,由 set oracle_sid=xxx设置的实例。

实例在数据库加载前启动,即先有实例,再加载数据库(先开辟内存,再加载磁盘文件)。

 8、加载数据库

命令行:alter database mount 

将相应的数据库挂接到xxx实例。

注:其中7、8可以合并为直接加载数据库,命令:startup mount

9、打开数据库

命令行:alter database open 回车,则打开了相应数据库。

注:其中7、8、9可以合并为直接打开数据库,命令:startup

10、关闭数据库

命令行: shutdown

关闭数据库、卸载数据库、关闭实例。



  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值