- 浏览: 239620 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
akka_li:
学习了!但是为什么后续的没有了?!
EJB4:RMI和RMI-IIOP -
springaop_springmvc:
apache lucene开源框架demo使用实例教程源代码下 ...
Lucene学习笔记(一)Lucene入门实例 -
qepipnu:
求solr 客户端 jar包
Solr学习笔记(三)Solr客户端开发实例 -
zhangbc:
是这问题,赞!
Oracle Start Up 2 Oracle 框架构件、启动、解决一个问题 -
feilian09:
查询 select hibernate jdbc 那个效率快
Hibernate,JDBC性能探讨
Warming Up:
本文适合Oracle初学者。
在Oracle Start Up 1中我说了几个概念和Oracle数据库的结构,当然在Oracle Start Up 1 里面主要说明的是Oracle数据库的结构(物理组成和逻辑结构)。
本文解决一个初学者很可能常遇到的问题(我遇到了,花了好久才解决)。
本文一切测试实验基于Oracle 10g 企业版。
1. 先描述一个连接Oracle 10g的错误:“shared memory realm does not exist”
如图所示Sqlplus连接时出现这个错误;
关于此错误的详细描述参见:http://kylinsoong.iteye.com/blog/774091,本文最后解决这个问题;
2. Oracle 服务器主要组件分析
下图所示为Oracle服务器主要组件:
如上图所示: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两大进程
用户进程:
在客户机内存上运行的程序,用来访问Oracle数据库;
与数据库实例建立连接,不能直接与数据库直接连接;
如在客户机上运行的 SQL PLUS,企业管理器;
用户进程向服务进程提出操作请求;
服务器进程:
一个直接与数据库服务器对话的进程;
响应用户进程提出的操作请求,并返回结果;
(2) Oracle的主要内存结构包括两个部分
程序全局区Program Global Area (PGA): 当服务器进程启动的时候分配。
每个用户连接到Oracle数据库的内存区域;
当进程建立的时候单独分配;
当进程终止的时候释放;
只能用于一个进程,是私有的,不能够共享
系统全局区System Global Area (SGA): 在实例启动的时候分配, 是数据库实例的基本组成部分,从结构框架图中分离出SGA部分如下图:
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语句 通过“最近最少使用”( least recently used (LRU) )算法来管理 |
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 Pool | Java池 用于解析java命令 在安装和使用java的时候需要使用 大小确定:JAVA_POOL_SIZE |
Large Pool | 大池 SGA中可选的一块内存区域 减少了共享池(Shared Pool)的负担 |
(3)Oracle实例的后台进程
感觉挺复杂,将在以后做专门说明;
3.Oracle数据库的启动
要启动和关闭数据库,必须要以具有Oracle 管理员权限的用户登陆,通常也就是以具有SYSDBA权限的用户登陆
启动一个数据库需要三个步骤:
(1)、 创建一个Oracle实例(非安装阶段)
(2)、 由实例安装数据库(安装阶段)
(3)、 打开数据库(打开阶段)
下面从实验的角度来实践这三个阶段:
Step one:以具有Oracle 管理员权限的用户登陆
sqlplus命令
sqlplus /nolog conn USER/PASSWORD as sysdba
截图:
Step two:创建一个Oracle实例(非安装阶段)
sqlplus命令
startup nomount
截图:
如上所示:NONOUNT选项仅仅创建一个Oracle实例。读取init.ora初始化参数文件、启动后台进程、初始化系统全局区(SGA)。Init.ora文件定义了实例的配置,包括内存结构的大小和启动后台进程的数量和类型等。当实例打开后,系统将显示一个SGA内存结构和大小的列表,如上截图所示
Step three: 由实例安装数据库(安装阶段)
命令:
alter database mount;
截图:
该命令创建实例并且安装数据库,但没有打开数据库。Oracle系统读取控制文件中关于数据文件和重作日志文件的内容,但并不打开该文件。
Step four:打开数据库(打开阶段)
命令:
截图:
该命令完成创建实例、安装实例和打开数据库的所有三个步骤。此时数据库使数据文件和重作日志文件在线,通常还会请求一个或者是多个回滚段。这时系统除了可以看到前面Startup Mount方式下的所有提示外,还会给出一个"数据库已经打开"的提示。此时,数据库系统处于正常工作状态,可以接受用户请求。
Note that:
当然可以用用一条命令打开
startup
给出截图:
上图中红色线分开的三部分表示三个启动阶段
4,解决一个问题
本文一开始提出问题,这里做一解决,为什么会出现那个问题了是因为Oracle数据库没有被启动,解决的方法就是如上面3所示操作打开数据库;
上述问题表现最直接的一个现象:查看任务管理器下oracle.exe所占内存,当oracle.exe所占内存为几十兆说明Oracle数据库没有启动,正常oracle.exe所占内存如下:
现在还原错误:关闭数据库后连接数据库,查看oracle.exe所占内存
查看内存:
与正常启动时相差比价大,所以总结一下解决“shared memory realm does not exist”方法:
(1)任务管理器中查看oracle.exe所占内存,当oracle.exe所占内存仅为几十兆,说明问题是数据库没有启动
(2)启动Oracle数据库,管理员登录,启动
sqlplus /nolog conn USER/PASSWORD as sysdba startup
PS: shared memory realm does not exist 这个错误我用了好长时间都没有解决主要原因是对数据库太陌生。
现在回想起来这个问题真是有点……
评论
而是这个错误提示太不友好了。
发表评论
-
Oracle - Add Exist Validation Before Create Table
2011-11-07 13:49 1451Usually we need to check the ta ... -
Oracle - An Managing Lob examples
2011-10-30 17:28 1440I met a request: I need to read ... -
PL/SQL Studing Notes
2011-10-20 21:48 1379As an extension of native ... -
一组Linux命令
2011-09-29 13:09 1469今天做测试发现Oracle服务器磁盘使用率达到100%导致Or ... -
Thinking in JDBC
2011-09-22 20:56 1867This blog will beas on a series ... -
Oracle Reference Exception Gallery
2011-07-05 22:28 1632The Following Exception is real ... -
SQL Studying Note I - Join
2011-07-02 10:28 1236SQL Join SQL Join are u ... -
Windows批处理脚步实例-创建Oracle数据库用户并向该用户添加数据
2010-12-11 09:25 3440Windows批处理使用方便、 ... -
Oracle starting up 5: Oracle 10g在WINDOWS服务中有5个Oracle服务项及解决与服务项相关的几个问题
2010-10-10 17:25 2336在Windows下安装Oracle 10g,安装完后在WIND ... -
Oracle starting up 5: Oracle数据库基础(续)
2010-10-07 14:15 0通用函数; 通用函数用于任何类型数据(包括空值) ... -
Oracle starting up 4: Oracle 10g 客户端 enterprise manager console 消失问题
2010-10-06 15:20 4313在家装了台服务器,因为家里电脑不行,所以服务器和客 ... -
Oracle Start Up 3:Oracle数据库基础
2010-10-05 20:17 21971. 创建TableSpace、用户及给用户分派权限 ... -
Oracle Start Up 1: 几个概念和Oracle数据库的物理结构和逻辑结构
2010-09-29 23:31 2042Oracle 基本概念 数据库(Database) ... -
Oracle 连接错误;ORA-27101: shared memory realm does not exist
2010-09-28 14:27 26353XP下安装Oracle10g 昨天下午刚安装完可以连接(Sq ... -
SQL Server 2005 dev 学习(1)
2010-09-26 15:14 1983关键字:SqlServer2005Dev版本安装 SQL Se ... -
Cassandra Dev 3:Cassandra 应用之CassandraAppender
2010-08-13 13:59 2080本文的目的是展示 ... -
Cassandra Dev 2: Cassandra入门(续) - Cassandra Cluster
2010-08-09 13:56 57835. Cassandra CLI 一般数据库服务器都会提供一 ... -
Cassandra Dev 1: Cassandra 入门
2010-08-06 17:55 4607最近, Cassandra 绝对是一个比较前端的话题 ...
相关推荐
它不是Oracle数据库服务器的主要组成部分,也不是服务器运行的基础构件,而是一个客户端访问服务器的工具。 三、Oracle数据库核心知识点 * Oracle数据库核心考点包括:SQL语句、索引、视图、存储过程、触发器等。 ...
### ORACLE ERP 11i表结构字段中文名称解析 #### BOM 模块常用表结构 ##### 1. **bom_bill_of_materials** **表名**: bom.bom_bill_of_materials **说明**: BOM 清单父项目表 **主要字段**: - **BILL_SEQUENCE...
- **SQLPLUS**是Oracle提供的一个命令行工具,用于执行SQL语句和脚本。 - 功能包括: - 执行SQL语句。 - 显示查询结果。 - 执行脚本文件。 - 使用内置命令进行调试。 - 在Windows环境下,SQLPLUS提供了图形界面...
数据库安全是Oracle的一个关键特性,它确保了数据的完整性和保密性。Oracle提供了多种安全机制,包括用户权限管理、角色分配、加密技术等,以防止未授权访问和数据泄露。 **1.3 基本的SQL SELECT语句** SELECT语句...
- **SQLPLUS**:Oracle提供的一个命令行工具,用于执行SQL语句和PL/SQL程序块。 - **SQLPLUS命令**: - **描述命令**: 如 `desc table_name` 显示表的结构。 - **设置命令**: 如 `set linesize 120` 设置输出宽度...
- **视图模块**负责界面元素的布局和展示,包括三个按钮(OK、Start、Stop)、一个文本框用于输入槽数,以及一个标签显示提示信息。此外,还需要创建一个用于显示豆机图形的面板。 - **控制逻辑模块**实现了核心的...
为了解决这个问题,Sonatype提供了Nexus作为私有仓库解决方案,通过搭建Nexus私服,可以实现对第三方库的统一管理,提高构建速度,减少网络带宽消耗。本文将详细介绍如何搭建和配置Maven Nexus私服。 #### 二、环境...
SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。...