设为首页 收藏本站
查看: 894|回复: 0

[经验分享] oracle连接异常shared memory realm does not exist

[复制链接]

尚未签到

发表于 2016-7-22 06:17:04 | 显示全部楼层 |阅读模式
  1. 先描述一个连接Oracle 10g的错误:“shared memory realm does not exist
DSC0000.png
 如图所示Sqlplus连接时出现这个错误;
  
  2. Oracle 服务器主要组件分析
  下图所示为Oracle服务器主要组件:
  
DSC0001.png
      如上图所示:Oracle服务器的组件结构,Oracle服务器可以看做由两部分组成:Oracle实例和Oracle数据库,上图被加粗直线分为两个部分,直线上半部分表示Oracle实例,而直线之下表示Oracle数据库。如Oracle Start Up 1中所说,Oracle数据库在物理上可以看做是由不同文件组成的文件系统,从逻辑上可以看做是一个由TableSpace、Segment、Extent、Blocks组成的四维结构;
  关于Oracle实例:
  是访问Oracle数据库的一种方法,一个Oracle实例只可以打开一个Oracle数据库;
  由内存和后台进程组成;
  存在于内存中,一个数据库对应一个共享的内存区,共享的内存区被Oracle后台进程所共享;
  建立与客户端的连接(连接到Oracle服务器实质上与Oracle服务器的Oracle实例建立连接)
  从以下几个方面分解上图:
  (1)Oracle两大进程
  
DSC0002.png
 
  用户进程:
  在客户机内存上运行的程序,用来访问Oracle数据库;     
  与数据库实例建立连接,不能直接与数据库直接连接;
  如在客户机上运行的 SQL PLUS,企业管理器;
  用户进程向服务进程提出操作请求;
  服务器进程:
  一个直接与数据库服务器对话的进程;
  响应用户进程提出的操作请求,并返回结果;
  (2) Oracle的主要内存结构包括两个部分
DSC0003.png
  程序全局区Program Global Area (PGA): 当服务器进程启动的时候分配。   
  每个用户连接到Oracle数据库的内存区域;
  当进程建立的时候单独分配;
  当进程终止的时候释放;
  只能用于一个进程,是私有的,不能够共享
  系统全局区System Global Area (SGA): 在实例启动的时候分配, 是数据库实例的基本组成部分,从结构框架图中分离出SGA部分如下图:
DSC0004.png

  
SGA包括几个内存结构:
  共享池(Shared Pool)
      数据库缓冲区快速缓存(Database Buffer Cache)
      重做日志缓冲区(Redo Log Buffer )
  大池(Large Pool)
      Java池(Java Pool)
      其它结构 (锁(lock)、锁存管理 (latch)、统计数据(statistical data))
 SGA几个特性:
  动态分配
      由SGA_MAX_SIZE确定大小
      有时称为共享全局区域(Shared Global Area)
       在SGA内以内存颗粒( granules )进行分配
SGA各内存部分功能键下表:
  

  Library Cache

  库快速缓冲区
存储最近使用的SQL和pl/sql语句的信息
  共享最近使用过的SQL语句
  通过“最近最少使用”( least recently used (LRU) )算法来管理
包括两种结构:共享SQL区和共享PL/SQL区
大小由共享池(Shared Pool)的大小确定

Data Dictionary Cache数据字典缓冲区
数据库中最近使用过的定义的一个集合
包括数据库文件、表、索引、列、用户、权限、和其它对象的信息
在解析阶段,服务器进程寻找数据字典信息来解析对象的名字和访问权限
把数据字典的信息加载到内存里面,来提高查询和DML(Data Manipulation Language)数据操纵语言语句的反应时间
大小由共享池(Shared Pool)的大小确定
Database Buffer Cache数据库缓冲区快速缓存
存储从数据文件提取出来的数据块的一个拷贝
当提取数据或者修改数据的时候,能很大的提高性能
通过LRU(Least Recently Used )算法来管理
DB_BLOCK_SIZE决定了主数据块的大小
Redo Log Buffer重做日志缓冲区
记录了对数据块的所有改变
主要的目的是为了恢复数据库
改变被记录在成为重做目录的对象里面(redo entries)
重做目录(Redo entries)包含重建或者重做改变的信息
大小通过LOG_BUFFER来定义
Java PoolJava池
用于解析java命令
在安装和使用java的时候需要使用
大小确定:JAVA_POOL_SIZE
Large Pool大池
SGA中可选的一块内存区域
减少了共享池(Shared Pool)的负担
  (3)Oracle实例的后台进程
  
DSC0005.png
 感觉挺复杂,将在以后做专门说明;
  
  3.Oracle数据库的启动
  要启动和关闭数据库,必须要以具有Oracle 管理员权限的用户登陆,通常也就是以具有SYSDBA权限的用户登陆
启动一个数据库需要三个步骤:
   (1)、 创建一个Oracle实例(非安装阶段)
   (2)、 由实例安装数据库(安装阶段)
   (3)、 打开数据库(打开阶段)
  下面从实验的角度来实践这三个阶段:
  Step one:以具有Oracle 管理员权限的用户登陆
  sqlplus命令

Java代码 DSC0006.gif   DSC0007.png DSC0008.gif





  • sqlplus /nolog   
  • conn USER/PASSWORD as sysdba  



sqlplus /nolog
conn USER/PASSWORD as sysdba
  截图:
DSC0009.png
 Step two:创建一个Oracle实例(非安装阶段)
sqlplus命令

Java代码  





  • startup nomount  



startup nomount
  截图:
DSC00010.png
       如上所示:NONOUNT选项仅仅创建一个Oracle实例。读取init.ora初始化参数文件、启动后台进程、初始化系统全局区(SGA)。Init.ora文件定义了实例的配置,包括内存结构的大小和启动后台进程的数量和类型等。当实例打开后,系统将显示一个SGA内存结构和大小的列表,如上截图所示
  Step three: 由实例安装数据库(安装阶段)
命令:

Java代码  





  • alter database mount;  



alter database mount;
  截图:
DSC00011.png
      该命令创建实例并且安装数据库,但没有打开数据库。Oracle系统读取控制文件中关于数据文件和重作日志文件的内容,但并不打开该文件。
  Step four:打开数据库(打开阶段)
  命令:

alter database open;
  截图:
DSC00012.png
  该命令完成创建实例、安装实例和打开数据库的所有三个步骤。此时数据库使数据文件和重作日志文件在线,通常还会请求一个或者是多个回滚段。这时系统除了可以看到前面Startup Mount方式下的所有提示外,还会给出一个"数据库已经打开"的提示。此时,数据库系统处于正常工作状态,可以接受用户请求。
  Note that:
  当然可以用用一条命令打开

Java代码  





  • startup  



startup
  给出截图:
DSC00013.png
 上图中红色线分开的三部分表示三个启动阶段
  
  4,解决一个问题
  本文一开始提出问题,这里做一解决,为什么会出现那个问题了是因为Oracle数据库没有被启动,解决的方法就是如上面3所示操作打开数据库;
  上述问题表现最直接的一个现象:查看任务管理器下oracle.exe所占内存,当oracle.exe所占内存为几十兆说明Oracle数据库没有启动,正常oracle.exe所占内存如下:
DSC00014.png
 现在还原错误:关闭数据库后连接数据库,查看oracle.exe所占内存
DSC00015.png
 查看内存:
DSC00016.png
 与正常启动时相差比价大,所以总结一下解决“shared memory realm does not exist”方法:
  (1)任务管理器中查看oracle.exe所占内存,当oracle.exe所占内存仅为几十兆,说明问题是数据库没有启动
  (2)启动Oracle数据库,管理员登录,启动

Java代码  





  • sqlplus /nolog   
  • conn USER/PASSWORD as sysdba   
  • startup  



sqlplus /nolog
conn USER/PASSWORD as sysdba
startup
  
  PS: shared memory realm does not exist 这个错误我用了好长时间都没有解决主要原因是对数据库太陌生。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-247489-1-1.html 上篇帖子: PL/SQL Developer 免安装Oracle客户端 下篇帖子: UNIX和WINDOWS2000上的ORACLE的差异 PartIII
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表