收藏 分享(赏)

oracle在linux的启动、访问、停止.pdf

上传人:精品资料 文档编号:10909114 上传时间:2020-01-20 格式:PDF 页数:58 大小:690.61KB
下载 相关 举报
oracle在linux的启动、访问、停止.pdf_第1页
第1页 / 共58页
oracle在linux的启动、访问、停止.pdf_第2页
第2页 / 共58页
oracle在linux的启动、访问、停止.pdf_第3页
第3页 / 共58页
oracle在linux的启动、访问、停止.pdf_第4页
第4页 / 共58页
oracle在linux的启动、访问、停止.pdf_第5页
第5页 / 共58页
点击查看更多>>
资源描述

1、第 第 1 1 章 章 数 数 据 据 库 库 的 的 启 启 动 动 和 和 关 关 闭 闭 通常所说的 Oracle Server 主要由两个部分组成:Instance 和 Database。Instance 是指一组 后台进程(在 Windows 上是一组线程)和一块共享内存区域;Database 是指存储在磁盘上的 一组物理文件。通过 Instance 与 Database 协同, Oracle 数据库才能形成一个动态的可访问关系 型数据库系统。 本章将由数据库如何启动与关闭入手,开始和大家一起进入 Oracle 数据库的国度。 1.1 数据库的启动 从表象来看,数据库的启动极其简单,

2、只需要以 SYSDBA/SYSOPER 身份登录,敲一条 startup 命令既可启动数据库。然而在这条命令之后, Oracle 需要执行一系列复杂的操作,深入 理解这些操作不仅有助于了解 Oracle 数据库的运行机制,还可以在故障发生时帮助大家快速 的定位问题的根源所在,所以接下来将分析一下数据库的启动过程。 Oracle 数据库的启动主要包含 3 个步骤: 启动数据库到 NOMOUNT 状态 启动数据库到 MOUNT 状态 启动数据库到 OPEN状态 完成这 3 个过程,数据库才能进入就绪状态,准备提供数据访问。图 1-1 描述了一个数据 库从关闭(SHUTDOWN)状态到 OPEN 状

3、态经历的这些步骤(关闭步骤与此相反,是一个逆 向过程) : 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 2 下面逐个来看看以上各个步骤的具体过程以及含义。 1.1.1 启动数据库到 NOMOUNT 状态 在启动的第一步骤,Oracle 首先寻找参数文件(pfile/spfile) ,然后根据参数文件中的设置 (如内存分配等设置) ,创建实例(Instance) ,分配内存,启动后台进程。NOMOUNT 的过程 也就是启动 数据库实例 的过程。这个过程在后台是启动 Oracle 可执行程序的过程,Windows 上是 oracle.exe文件的初始化,在 UNIX/Linux 上是

4、 Oracle 可执行文件的初始化。 Windows上 Oracle 11g 的执行文件大小约为 86MB,而 Linux下 Oracle 11g 的执行文件达 到 145MB 左右: D:oracleproduct11.1.0BINdir oracle.exe 2007-10-03 17:42 89,702,400 oracle.exe oraclelocalhost bin$ ls -al $ORACLE_HOME/bin/oracle -rwsr-s-x 1 oracle dba 151901909 Jul 4 15:13 /opt/oracle/product/11.1.0/bin/o

5、racle 在 UNIX/Linux上可以通过 file命令查看 oracle执行文件来判断 Oracle是 64位或是 32位 的,以下是 Linux 平台的一个示范输出,输出显示 Oracle 为 32 位: oraclelocalhost bin$ file $ORACLE_HOME/bin/oracle /opt/oracle/product/11.1.0/bin/oracle: setuid setgid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically

6、 linked (uses shared libs), not stripped 在 Windows上,也有可选的命令增强工具可以提供类似的功能。 了解 Oracle 可执行文件还有另外一个用途,在 UNIX/Linux 上通过 strings 命令可以将 Oracle 可执行文件中的字符文本转储出来,在转储的文本中可以找到很多有意思的信息,比如 一些 Oracle未公开的 Hints 信息、数据库字典基表创建信息等,类似如下一条命令可以完成这 样的工作: strings $ORACLE_HOME/bin/oracle oracle.txt 在 NOMOUNT 初始化的过程中,只要拥有了一个参

7、数文件,就可以凭之启动实例 (Instance) ,这一步骤并不需要任何控制文件或数据文件等的参与。 1 实例以及 进程的创建 以下是正常情况下启动到 NOMOUNT 状态的过程: oracleeygle bdump$ sqlplus /nolog SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jun 28 12:42:30 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved. SQL connect / as sysdba Connected to an idle insta

8、nce. 第 1章 数据库的启动和关闭 3 SQL startup nomount; ORACLE instance started. Total System Global Area 1073741824 bytes Fixed Size 1223488 bytes Variable Size 264242368 bytes Database Buffers 801112064 bytes Redo Buffers 7163904 bytes 注意这里,Oracle 根据参数文件的内容,创建了 Instance,分配了相应的内存区域,启动 了相应的后台进程。SGA 的分配信息从以上输出中可以

9、看到。 观察告警日志文件(alert_.log) ,可以看到这一阶段的启动过程: 读取参 数文件, 应用 参数启动实例。 所有在参数文件中定义的非缺省参数都会记录在告警日志文件中, 以下是这一过程的日志摘要示例: Wed Jun 28 12:42:40 2006 Starting ORACLE instance (normal) LICENSE_MAX_SESSION = 0 LICENSE_SESSIONS_WARNING = 0 Picked latch-free SCN scheme 2 Autotune of undo retention is turned on. IMODE=BR

10、ILAT =18 LICENSE_MAX_USERS = 0 SYS auditing is disabled ksdpec: called for event 13740 prior to event group initialization Starting up ORACLE RDBMS Version: 10.2.0.1.0. System parameters with non-default values: processes = 150 _shared_pool_size = 255852544 _large_pool_size = 0 _java_pool_size = 419

11、4304 _streams_pool_size = 0 sga_target = 1073741824 control_files = /opt/oracle/oradata/eygle/control01.ctl, /opt/oracle/oradata/eygle/control02.ctl, /opt/oracle/oradata/eygle/control03.ctl db_block_size = 8192 _db_cache_size = 805306368 background_dump_dest = /opt/oracle/admin/eygle/bdump 书名书名书名书名书

12、名书名书名书名书名书名书名书名书名书名 4 user_dump_dest = /opt/oracle/admin/eygle/udump db_name = eygle 应用参数创建实例之后,后台进程依次启动,注意以下输出中包含了 PID 信息以及 OS ID 两个信息, PID 代表该进程在数据库内部的标识符编号,而 OS ID则代表该进程在操作系统上 的进程编号: PMON started with pid=2, OS id=6290 PSP0 started with pid=3, OS id=6292 MMAN started with pid=4, OS id=6294 DBW0 s

13、tarted with pid=5, OS id=6296 LGWR started with pid=6, OS id=6298 CKPT started with pid=7, OS id=6300 SMON started with pid=8, OS id=6302 RECO started with pid=9, OS id=6304 CJQ0 started with pid=10, OS id=6306 MMON started with pid=11, OS id=6308 MMNL started with pid=12, OS id=6310 在这里提醒大家注意一下 Ora

14、cle 不同版本告警日志信息的变化, 在 Oracle 9i 早期版本中, 后台进程启动的日志信息里并不包含 OS ID, 以下是 Oracle 9.2.0.4的日志信息 (在 Oracle 9.2.0.8 中已经包含了 OS ID信息) : PMON started with pid=2 DBW0 started with pid=3 LGWR started with pid=4 CKPT started with pid=5 SMON started with pid=6 RECO started with pid=7 在 Oracle 11g 中,这部分信息有了进一步的增强,输出中不仅

15、包含了 OS ID,而且每个后 台进程的启动都有单独的时间标记 (时间标记可以帮助用户判断每个后台进程启动时所消耗的 时间,从而辅助进行问题诊断) : Sat Jul 05 09:53:55 2008 PMON started with pid=2, OS id=13898 Sat Jul 05 09:53:55 2008 VKTM started with pid=3, OS id=13900 at elevated priority VKTM running at (20)ms precision Sat Jul 05 09:53:55 2008 DIAG started with pid

16、=4, OS id=13904 Sat Jul 05 09:53:55 2008 DBRM started with pid=5, OS id=13906 第 1章 数据库的启动和关闭 5 Sat Jul 05 09:53:55 2008 PSP0 started with pid=6, OS id=13908 提示:从 Oracle 不同版本中的变化来体会 Oracle 的技术进步、甚至借鉴这些变化是学习 Oracle 的方法之一。任何细微的变化都值得注意,认真、细致、严谨是对 DBA 的 基本素质要 求。 细心的读者朋友或许已经注意到, 在前面日志里的进程启动信息里, 并没有 pid=1

17、的进程, 那么这个进程是否存在呢? 2 V$PROCESS 视图 通过数据库中的 v$process视图,可以找到对应于操作系统的每个进程信息: SQL select addr,pid,spid,username,program from v$process; ADDR PID SPID USERNAME PROGRAM - - - - - 5FE162AC 1 PSEUDO 5FE16860 2 6290 oracle oracleeygle (PMON) 5FE16E14 3 6292 oracle oracleeygle (PSP0) 5FE173C8 4 6294 oracle ora

18、cleeygle (MMAN) 5FE1797C 5 6296 oracle oracleeygle (DBW0) 5FE17F30 6 6298 oracle oracleeygle (LGWR) 5FE184E4 7 6300 oracle oracleeygle (CKPT) 注意以上输出,pid=1 的进程是一个 PSEUDO 进程,这个进程被认为是初始化数据库的 进程,启动其他进程之前即被占用,并在数据库中一直存在。v$process 的查询输出中,SPID 列代表的就是操作系统上的进程号,通过 SPID 可以将进程从操作系统到数据库关联起来: oracleeygle bdump$

19、ps -ef|grep ora_ oracle 6290 1 0 12:42 ? 00:00:00 ora_pmon_eygle oracle 6292 1 0 12:42 ? 00:00:00 ora_psp0_eygle oracle 6294 1 0 12:42 ? 00:00:00 ora_mman_eygle oracle 6296 1 0 12:42 ? 00:00:00 ora_dbw0_eygle oracle 6298 1 0 12:42 ? 00:00:00 ora_lgwr_eygle oracle 6300 1 0 12:42 ? 00:00:00 ora_ckpt_e

20、ygle 如果在操作系统上发现某个进程表现异常(如占用很高的 CPU资源) ,那 么 通过操作系统 上的 PID 和 V$PROCESS 视图中的 SPID 关联,就可以找到这个 OS 上的进程在数据库内部 的化身,从而可以进行进一步的跟踪诊断。 V$PROCESS 视图包含当前数据库中活动进程的相关信息, 这些进程在操作系统上都存在书名书名书名书名书名书名书名书名书名书名书名书名书名书名 6 与之对应的 OS 进程。 其中 LATCHWAIT 列代表进程当前正在等待的 Latch 信息, LATCHSPIN 则记录进程正在通过 SPIN 进行 Latch的竞争。 Latch 通常被称为闩,是

21、数据库内部的串行锁机 制, 主要用来控制内存上的并发, 在多处理器系统上, Oracle 进程通过自旋 (spin) 来进行 Latch 争夺。 这个视图结构如下所示(Oracle 10gR2 信息) : SQL desc v$process Name Null? Type - - - ADDR RAW(4) PID NUMBER SPID VARCHAR2(12) USERNAME VARCHAR2(15) SERIAL# NUMBER TERMINAL VARCHAR2(30) PROGRAM VARCHAR2(48) TRACEID VARCHAR2(255) BACKGROUND VA

22、RCHAR2(1) LATCHWAIT VARCHAR2(8) LATCHSPIN VARCHAR2(8) PGA_USED_MEM NUMBER PGA_ALLOC_MEM NUMBER PGA_FREEABLE_MEM NUMBER PGA_MAX_MEM NUMBER 注意这里的 ADDR 字段代表的是进程的地址,进程的状态等信息在内存中记录,这个 ADDR 记录的正是这样的内存地址信息。ADDR 在数据库中(甚至是在所有软件中)是非常 重要的,虽然通常并不会用到,但是深入理解这些知识将有助于更好地了解 Oracle 数据库。 进程的地址(Address of Process)进一步的被

23、缩写为 PADDR,在 V$SESSION 视图中记 录的 PADDR 就是 V$PROCESS.ADDR 的进一步延伸, 通过两者关联, 可以向数据库进一步 深入。 如果向操作系统端延伸,则 SPID 代表的正是操作系统进程标识符(Operating System Process Identifie) ,通过 SPID 和 OS 中看到的进程 PID 关联,就可以建立从操作系统到数据库 的关联。 所以 V$PROCESS 被认 为是从操作系统到数据库的入口。此外,和 PGA 相关的几个字 段则记录了进程的 PGA 使用情况。 第 1章 数据库的启动和关闭 7 3 参数文件 的选择 接下来关注

24、一下启动过程中 Oracle选择参数文件的顺序。 从 Oracle 9i开始,spfile被引入 Oracle 数据库,Oracle 首选 spfile.ora 文 件作为启动参数文件;如果该文件不存在,Oracle 选择 spfile.ora 文件;如果前两者都不存在, Oracle 将会选择 init.ora 文件;如果以上 3 个文件都不存在,Oracle 将无法创 建和启动 Instance。Oracle 在启动过程中,会在特定的路径中寻找参数文件,在 UNIX/Linux 下的路径为$ORACLE_HOME/dbs 目录,在 Windows 上的路径为$ORACLE_HOMEdata

25、base 目录。 可以在 SQL*PLUS中通过 show parameter spfile命令来检查数据库是否使用了 spfile文件, 如果 value 不为 Null,则数据库使用了 spfile 文件: SQL show parameter spfile NAME TYPE VALUE - - - spfile string ?/dbs/spfile.ora 注意这里的“?”代表 ORACLE_HOME, 代表数据库的 sid。现在如果更名 spfile.ora文件,此后 Oracle 将选择 spfile.ora文件启动数据库: oraclejumper dbs$ mv spfile

26、conner.ora spfileconner.ora.bak SQL startup nomount SQL show parameter spfile NAME TYPE VALUE - - - spfile string ?/dbs/spfile.ora 如果再更名 spfile.ora 文件,此后 Oracle 将选择 init.ora 文件启动数据库: oraclejumper dbs$ mv spfile.ora spfile.ora.bak SQL startup nomount SQL show parameter spfile NAME TYPE VALUE - - - sp

27、file string 如果这 3 个文件都不存在,Oracle将无法启动: oraclejumper dbs$ mv initconner.ora initconner.ora.bak SQL startup ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file /opt/oracle/product/9.2.0/dbs/initconner.ora 注意这里出现的错误提示, 报告无法找到参数文件 init.ora, 这正是 Oracle书名书名书名书名书名书名书

28、名书名书名书名书名书名书名书名 8 在启动过程中最后一个查找的参数文件。 在 Oracle 整个启动过程中,参数文件是写在应用程序中的硬代码,按照前面描述的顺序 进行查找,以下是来自源码中关于参数文件及其查找顺序的定义: ?/dbs/spfile.ora ?/dbs/spfile.ora ?/dbs/init.ora 虽然不能改变 Oracle 对于参数文件的搜索路径及行为,但是如果参数文件不在相应的位 置,在 Linux/UNIX系统上,可以通过符号链接来进行重定位,以满足一些特殊需要(具体请 参考第 3 章的内容) 。 4 实例启动 最小参数需求 在参数文件中,通常需要最少的参数是 db_

29、name,设置了这个参数之后,数据库实例就可 以启动,来看一个简单的测试。 可以随意命名一个 ORACLE_SID(测试来自于 Linux 环境下,同样适用于 UNIX,对于 Windows平台,则需要通过 oradim.exe 工具创建服务) ,然后尝试启动到 NOMOUNT 状态: oraclejumper dbs$ export ORACLE_SID=julia oraclejumper dbs$ sqlplus “/ as sysdba“ SQL*Plus: Release 9.2.0.4.0 - Production on Mon May 8 11:08:36 2006 Copyri

30、ght (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to an idle instance. SQL startup nomount; ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file /opt/oracle/product/9.2.0/dbs/initjulia.ora 参数文件查找失败会给出提示信息, 此时创建一个最简单的参数文件 (仅包含 DB_NAME 初始化参数)

31、 ,然后就可以启动实例: SQL ! echo “db_name=julia“ /opt/oracle/product/9.2.0/dbs/initjulia.ora SQL startup nomount; ORACLE instance started. Total System Global Area 97588504 bytes Fixed Size 451864 bytes Variable Size 46137344 bytes Database Buffers 50331648 bytes Redo Buffers 667648 bytes 第 1章 数据库的启动和关闭 9 如果

32、不设置,background_dump_dest 目录(告警日志文件 alert_.log 的存 放地点)缺省位于$ORACLE_HOME/rdbms/log 目录下: SQL show parameter background_dump NAME TYPE VALUE - - - background_dump_dest string ?/rdbms/log 顺便看下其他几个缺省路径的地点: SQL show parameter dump_dest NAME TYPE VALUE - - - background_dump_dest string ?/rdbms/log core_dump_

33、dest string ?/dbs user_dump_dest string ?/rdbms/log SQL show parameter control_files NAME TYPE VALUE - - - control_files string ?/dbs/cntrl.dbf 收录简单启动实例日志供大家参考: oraclejumper dbs$ cat $ORACLE_HOME/rdbms/log/alert_julia.log Mon May 8 11:09:04 2006 Starting ORACLE instance (normal) Mon May 8 11:09:04 2

34、006 LICENSE_MAX_SESSION = 0 LICENSE_SESSIONS_WARNING = 0 SCN scheme 2 Using log_archive_dest parameter default value LICENSE_MAX_USERS = 0 SYS auditing is disabled Starting up ORACLE RDBMS Version: 9.2.0.4.0. System parameters with non-default values: db_name = julia PMON started with pid=2 DBW0 sta

35、rted with pid=3 LGWR started with pid=4 CKPT started with pid=5 SMON started with pid=6 RECO started with pid=7 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 10 这样,通过以上步骤就以最少的参数需求启动了 Oracle 实例。 5 ORACLE_SID 的含义 回顾一下前面的内容可以注意到, SID和 ORACLE_SID已经多次出现, 那么 SID是什么? 在数据库启动过程中又起到什么作用呢? SID 是 System IDentifier的缩写,而 ORACLE_S

36、ID就是 Oracle System IDentifier的缩写, 在 Oracle 系统中, ORACLE_SID以环境变量的形式出现, 当 Oracle 实例启动时, 在操作系统 上 fork 的进 程就依据这个 ORACLE_SID 来创建,这就是 SID 的作用。 Oracle 的实例(Instance)是由一块共享内存区域(SGA)和一组后台进程(Background Processes)共同组成,而后台进程正是数据库和操作系统进行交互的通道,这些进程的名称就 是通过 ORACLE_SID决定的。 通过前面的讨论可以知道,实例的启动需要一个参数文件,参数文件的名称就是由 ORACLE

37、_SID决定的,对于 init 文件,缺省的文件名称是 init.ora,对 于 spfile 文件,缺省的文件名为 spfile.ora, Oracle 依据 ORACLE_SID来决定和寻找参 数文件启动实例。 在同一个$ORACLE_HOME 下,通过参数文件,Oracle 能够根据 ORACLE_SID将实例区 分开来;但是注意如果在不同的$ORACLE_HOME 下,即使在同一台主机上,Oracle 也能够 创建相同 ORACLE_SID的实例。 以下一个测试,首先启动一个 Oracle 8i 下 ORACLE_SID为 eygle 的实例: $ export ORACLE_SID=

38、eygle $ sqlplus “/ as sysdba“ SQL*Plus: Release 8.1.7.0.0 - Production on Fri Feb 16 10:23:58 2007 (c) Copyright 2000 Oracle Corporation. All rights reserved. Connected to an idle instance. SQL startup nomount; ORACLE instance started. SQL ! ps -ef|grep ora_smon_eygle oracle8 11123 11076 0 10:24:15

39、pts/1 0:00 grep ora_smon_eygle oracle8 11092 1 0 10:24:02 ? 0:00 ora_smon_eygle 接下来又可以启动另外$ORACLE_HOME 下 ORACLE_SID为 eygle 的实例: $ export ORACLE_SID=eygle $ sqlplus “/ as sysdba“ SQL*Plus: Release 9.2.0.4.0 - Production on Fri Feb 16 10:24:43 2007 Copyright (c) 1982, 2002, Oracle Corporation. All rig

40、hts reserved. 第 1章 数据库的启动和关闭 11 Connected to an idle instance. SQL startup nomount; ORACLE instance started. SQL ! ps -ef|grep ora_smon_eygle oracle9 11214 11172 0 10:24:58 pts/1 0:00 grep ora_smon_eygle oracle8 11092 1 0 10:24:02 ? 0:00 ora_smon_eygle oracle9 11188 1 0 10:24:48 ? 0:00 ora_smon_eygl

41、e 现在这同一台主机上就启动了两个相同名称的实例,在操作系统上,Oracle 能够通过 ID 标识将共享内存或信号量区分开来: $ ipcs -i IPC status from as of Fri Feb 16 10:30:02 CST 2007 T ID KEY MODE OWNER GROUP Message Queues: q 0 0x2e781d5 -rw-r-r- root root T ID KEY MODE OWNER GROUP ISMATTCH Shared Memory: m 4096 0xabdc9b64 -rw-r- oracle8 dba 12 m 1025 0x7

42、9552064 -rw-r- oracle9 dba 11 Semaphores: s 1245184 0x79978bac -ra-r- oracle8 dba s 458753 0xa0e9f594 -ra-r- oracle9 dba 通过 Oracle提供的一个小工具 sysresv,我们可以找到对应于不同的 ORACLE_SID,操作 系统上创建的共享内存段 ID(Shared Memory)和信号量 ID(Semaphores)等信息: $ sysresv -l eygle julia IPC Resources for ORACLE_SID “eygle“ : Shared Me

43、mory: ID KEY 2560 0x79552064 Semaphores: ID KEY 720896 0xa0e9f594 Oracle Instance alive for sid “eygle“ IPC Resources for ORACLE_SID “julia“ : Shared Memory: ID KEY 514 0xab281214 Semaphores: 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 12 ID KEY 196610 0xa7645a54 Oracle Instance alive for sid “julia“ 6 INSTANCE_NA

44、ME 的含 义 在数据库内部和 ORACLE_SID相关联的概念就是 INSTANCE_NAME。 Oracle 数据库内部存 在 一个初始 化 参数 INSTANCE_NAME ,用于标 示 数据库实 例 的 名 称, 其缺省值通常就是 ORACLE_SID;但是初始化参数 INSTANCE_NAME 和 ORACLE_SID 可以不同,不同实例可以拥有相同的 INSTANCE_NAME。 在同一个 ORACLE_HOME 下,只要 ORACLE_SID 不同,数据库并不校验 INSTANCE_NAME 参数;通过简单的参数文件复制,就可以在同一台服务器上创建多个具有 相同 INSTANCE

45、_NAME的实例(注意以下测试来自 Oracle 9i 数据库) : bash-2.03$ cd $ORACLE_HOME/dbs bash-2.03$ cp initeygle.ora initjulia.ora bash-2.03$ export ORACLE_SID=julia bash-2.03$ sqlplus “/ as sysdba“ SQL startup nomount; ORACLE instance started. Total System Global Area 303532408 bytes Fixed Size 731512 bytes Variable Size 184549376 bytes Database Buffers 117440512 bytes Redo Buffers 811008 bytes 此时同一主机上就可以启动多个实例,ORACLE_SID 不同,但是拥有了相同的 INSTANCE_NAME: SQL show parameter instance_name NAME TYPE VALUE - - - instance_name string eygle 但是注意,在数据库内部视图 V$INSTANCE 中也记录着一个 INSTANCE_NAME,这个 INSTA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报