前言:前两天,在接触一个新项目,他们的数据库框架,在一台机器上,当时别人交代是一个数据库两个实例(当前举例a,b),我看了看交接文档,那明明是一台机器,不是单机数据库吗?怎么有两个实例?登录相应的环境,查看了一下,刚开始登录,查看了监听,只有一个ASM实例的监听,没有数据库服务的监听,很是摸不着头脑,通过env |grep ORACLE查看当前的Oracle实例名和数据库的安装位置,查看tnsname.ora文件,他们配置是通过主机名配置的,明显service_name一样,仅仅是网络服务名不一样,这不是单机数据库吗?通过他们提供的用户名和密码还有连接串登录,死活登不上去,后来使用sys登录,也不加连接串,看看是默认登录什么环境吧,然后,登录进去了,查看了一个db_name(a),instance_name(a),dba_users再查看了他们提供的用户(a1,b1),只有一个用户,没有找到(b1),后来退出去,设置新的实例名为另外一个b,sys默认登录,发现db_name 是另外一个,instance_name是(b),从这就可以看出来了,他们这不是单机数据库,不是双实例,而是在一台服务器上建立了两个数据库,对应了两个实例,两个用户,现在大白了。
后来我寻思着,为什么会出现这样的乌龙,主要是感觉他们对这个db_name和instance_name认知不深刻,现在咱们理解一下这两个的意思,并且做一下练习。
Oracle文档中对于db_name的定义:DB_NAME必须是一个不超过8个字符的文本串.在数据库创建过程中,db_name被记录在数据文件,日志文件和控制文件中。如果数据库实例启动过程中参数文件中的db_name和控制文件中的数据库名称不一致,则数据库不能启动。一个实例可以mount并打开任何数据库,但是同一时间一个实例只能打开一个数据库。一个数据库可以被一个或多个实例所mount并打开(在OPS/RAC环境下,一个数据库可以被多个实例所打开).