远程连接与数据库状态的联系――本质是监听器动态注册造成差异
2013-12-28 10:20
344 查看
问题描述:我连一台ubuntu上的Oracle,但服务器必须启动到mount阶段才能连上。但按理说连接跟实例没关系。而且连另一台redhat的Oracle就只打开监听器就可以了。后来我查了ubuntu那台机子的listener.ora,发现里面没有注册,原来一直都是用的动态注册而不是静态注册(这里详情看Dave的博文Oracle Listener 动态注册 与 静态注册)。
远程连接,要解析远程要连接的实例,然后在自己的注册清单里找对应的实例。
但监听器在数据库nomount模式时去找监听器注册的(不过Dave说是open才会找监听器注册),但是处于blocked状态。到了mount模式才是ready状态。
动态注册的这时候才会在监听器清单里找到可连接的对应的实例。故此动态注册必须要到mount状态下sys才可以远程连接。
静态注册一开始知道从注册清单里找到远程要连接的实例。
[b]那本机在没有监听的情况下,启动实例是通过什么方式呢?我测试的不是以操作系统用户身份,sys用户认证就可以启动了。因为就算本机启动,它也是C/S模式。[/b]
[b] 我的理解是因为有操作系统有ORACLE_SID 和 ORACLE_HOME等变量,就知道怎么去启动实例,而不用依赖监听器清单里的信息去启动实例。[/b]
请教到的资料:使用的方式叫作称为beq的协议去启的.而远程时TCP。连上去后,就会启动一个beq协议的服务器进程,然后这个服务器进程再去启动oracle实例.
1.shutdown
SQL> conn sys/xuhan1992@mylinux as sysdba
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务[b](监听器处于unknown状态,清单中没有目标实例)[/b]
2.nomount
实例的启动通常包含下列任务: a. 在$ORACLE_HOME/dbs[win平台为database]使用参数文件,按顺序spfile.ora ---< spfile.ora ---< init.ora
b.分配SGAc.启动后台进程d.打开并修改告警.log文件及跟踪文件SQL> conn sys/xuhan1992@mylinux as sysdba
ERROR:
ORA-12528: TNS: 监听程序: 所有适用例程都无法建立新连接[b](监听器处于blocked状态,有目标实例,但阻塞不能连接)[/b]
3.mount
mount阶段完成的任务:a.启动实例并打开控制文件,将数据库与实例关联起来b.利用参数文件中的说明,打开并锁定控制文件c.读取控制文件以获取数据文件和重做日志文件的名字和状态信息,但不检查数据日志文件是否存在使用场景:a.重命名数据文件,移动数据文件位置等(数据库打开,表空间脱机的情况下也可以重命名数据文件)b.启用或关闭重做日志文件的归档及非归档模式c.实现数据库的完全恢复
如果是从nomount到mount只能是alter database mount,不能使startup mount ,这个只能一开始就用。否则
SQL> startup nomount
ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它
mount之后
1.SQL> conn sys/xuhan1992@mylinux as sysdba 正常连接[b](监听器处于ready状态)[/b]
2.SQL> conn scott/tiger@mylinux
ERROR:
ORA-01033: ORACLE initialization or shutdown in progress
进程 ID: 0
会话 ID: 0 序列号: 0
这说明了sysdba是通过口令认证,而普通用户使用数据字典认证
4.open
open阶段完成的任务:a.打开数据文件b.打开联机日志文件
远程连接,要解析远程要连接的实例,然后在自己的注册清单里找对应的实例。
但监听器在数据库nomount模式时去找监听器注册的(不过Dave说是open才会找监听器注册),但是处于blocked状态。到了mount模式才是ready状态。
动态注册的这时候才会在监听器清单里找到可连接的对应的实例。故此动态注册必须要到mount状态下sys才可以远程连接。
静态注册一开始知道从注册清单里找到远程要连接的实例。
[b]那本机在没有监听的情况下,启动实例是通过什么方式呢?我测试的不是以操作系统用户身份,sys用户认证就可以启动了。因为就算本机启动,它也是C/S模式。[/b]
[b] 我的理解是因为有操作系统有ORACLE_SID 和 ORACLE_HOME等变量,就知道怎么去启动实例,而不用依赖监听器清单里的信息去启动实例。[/b]
请教到的资料:使用的方式叫作称为beq的协议去启的.而远程时TCP。连上去后,就会启动一个beq协议的服务器进程,然后这个服务器进程再去启动oracle实例.
1.shutdown
SQL> conn sys/xuhan1992@mylinux as sysdba
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务[b](监听器处于unknown状态,清单中没有目标实例)[/b]
2.nomount
实例的启动通常包含下列任务: a. 在$ORACLE_HOME/dbs[win平台为database]使用参数文件,按顺序spfile.ora ---< spfile.ora ---< init.ora
b.分配SGAc.启动后台进程d.打开并修改告警.log文件及跟踪文件SQL> conn sys/xuhan1992@mylinux as sysdba
ERROR:
ORA-12528: TNS: 监听程序: 所有适用例程都无法建立新连接[b](监听器处于blocked状态,有目标实例,但阻塞不能连接)[/b]
3.mount
mount阶段完成的任务:a.启动实例并打开控制文件,将数据库与实例关联起来b.利用参数文件中的说明,打开并锁定控制文件c.读取控制文件以获取数据文件和重做日志文件的名字和状态信息,但不检查数据日志文件是否存在使用场景:a.重命名数据文件,移动数据文件位置等(数据库打开,表空间脱机的情况下也可以重命名数据文件)b.启用或关闭重做日志文件的归档及非归档模式c.实现数据库的完全恢复
如果是从nomount到mount只能是alter database mount,不能使startup mount ,这个只能一开始就用。否则
SQL> startup nomount
ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它
mount之后
1.SQL> conn sys/xuhan1992@mylinux as sysdba 正常连接[b](监听器处于ready状态)[/b]
2.SQL> conn scott/tiger@mylinux
ERROR:
ORA-01033: ORACLE initialization or shutdown in progress
进程 ID: 0
会话 ID: 0 序列号: 0
这说明了sysdba是通过口令认证,而普通用户使用数据字典认证
4.open
open阶段完成的任务:a.打开数据文件b.打开联机日志文件
相关文章推荐
- 远程连接与数据库状态的联系——本质是监听器动态注册造成差异
- maven项目:spring配置里:连接远程oracle(虚拟机里),【虚拟机没开启(数据库连接不上)导致tomcat启动失败(web.xml配置Spring了监听器)】=(也不报具体错误,就是超时)
- Listener 静态注册、与动态注册 --可以远程连接别的机器的DBServer
- oracle动态注册的监听也能远程启动数据库
- SQL2012还原数据库操作在本地服务器上操作和用别的电脑远程连接到服务器进行操作的文件路径差异
- SQL Server 2008 如何开启远程数据库的连接【sql server 错误号53;17】
- 【基础中心】笔记三--oracle连接远程数据库
- 连接数据库与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误,请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。
- 本地数据库(SQL Server)远程连接服务器端服务器
- 解决SQL Server管理器无法连接远程数据库的问题
- 客户端用PLSQL远程连接数据库
- Ubuntu下Python使用MySQLdb远程连接数据库的常见问题及解决方案
- 一个完整的Nodejs项目 完成连接数据库(MySQL),登陆、注册功能 session的使用 和发送邮件
- PL/SQl developer远程连接数据库
- navicate远程连接数据库出现1045 access denied fo
- plsql配置远程连接数据库
- MySQL错误:Can't connect to MySQL server (10060)远程连接数据库失败
- PLSQL Developer 远程连接Oracle XE数据库(其他Oracle数据库类似)
- 远程连接数据库
- 本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库