百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

Oracle体系结构之数据库启停(二)--实例操作

sinye56 2024-10-16 14:59 14 浏览 0 评论

实例启动与关闭

一、 数据库的四种状态.

二、 启动数据库的相关指令.

三、 实例的启动与关闭.


接上一篇

三、实例的启动与关闭

(三)、启动实例阶段(STARTED)

3.打开的文件

1) 警告日志文件

 //启动实例前执行,查看进程是否打开
 [oracle@oracle ~ ]$ ps -ef | grep ora_ 
oracle 4809 4776 0 09:10 pts/2 00:00:00 grep ora_//未打开 
[oracle@oracle trace ]$ tail -f alertorcl.log//文件尾部打开,并持续输出 
SQL> STARTUP NOMOUNT; 
ORACLE instance started.
 //启动后分配了内存,并显示在输出 
Total System Global Area 636100608 bytes
Fixed Size 1338392 bytes 
Variable Size 377488360 bytes
Database Buffers 251658240 bytes 
Redo Buffers 5615616 bytes 
//启动实例后执行,发现进程已经打开
 [oracle@oracle ~]$ ps -ef | grep ora_ 
oracle 4884 1 0 09:11 ? 00:00:00 ora_pmon_orcl
 oracle 4886 1 0 09:11 ? 00:00:00 ora_vktm_orcl 
oracle 4890 1 0 09:11 ? 00:00:00 ora_gen0_orcl
 oracle 4892 1 0 09:11 ? 00:00:00 ora_diag_orcl
 oracle 4894 1 0 09:11 ? 00:00:00 ora_dbrm_orcl 
oracle 4896 1 0 09:11 ? 00:00:00 ora_psp0_orcl 
oracle 4898 1 0 09:11 ? 00:00:00 ora_dia0_orcl 
oracle 4900 1 1 09:11 ? 00:00:01 ora_mman_orcl 
oracle 4902 1 0 09:11 ? 00:00:00 ora_dbw0_orcl 
oracle 4904 1 0 09:11 ? 00:00:00 ora_lgwr_orcl 
oracle 4906 1 0 09:11 ? 00:00:00 ora_ckpt_orcl 
oracle 4908 1 0 09:11 ? 00:00:00 ora_smon_orcl 
oracle 4910 1 0 09:11 ? 00:00:00 ora_reco_orcl 
oracle 4912 1 0 09:11 ? 00:00:00 ora_mmon_orcl 
oracle 4914 1 0 09:11 ? 00:00:00 ora_mmnl_orcl
 oracle 4916 1 0 09:11 ? 00:00:00 ora_d000_orcl 
oracle 4918 1 0 09:11 ? 00:00:00 ora_s000_orcl
 oracle 5025 4776 0 09:13 pts/2 00:00:00 grep ora_
------------------------------以下为警告日志文件内容节选--------------------------
//读取参数 
System parameters with non-default values:
 //限制进程数 
processes = 150
 //限制内存大小,并进行自动内存管理 
memory_target = 608M
 //控制文件的路径和名称 
control_files = "/u01/app/oracle/oradata/orcl/control01.ctl"
 control_files = "/u01/app/oracle/flash/orcl/orcl/control02.ctl" 
control_files = "/u01/app/oracle/oradata/orcl/control03.ctl" 
//数据库标准块大小
 db_block_size = 8192 /
/Oracle 数据库版本号 
compatible = "11.2.0.0.0" 
//UNDO 表空间的名字 
undo_tablespace = "UNDOTBS1" 
//是否允许远程登录的相关配置 
remote_login_passwordfile= "EXCLUSIVE" /
/数据库审计信息 
audit_file_dest = "/u01/app/oracle/admin/orcl/adump" 
//数据库后台进程追踪文件和警告日志文件
 background_dump_dest = "/u01/app/oracle/admin/orcl/bdump" 
//核心的追踪信息 
core_dump_dest = "/u01/app/oracle/admin/orcl/cdump"
 //SQL 和会话的追踪信息 
user_dump_dest = "/u01/app/oracle/admin/orcl/udump"
 //数据库名 
db_name = "orcl" 
... ... ... ... ... ... ... ... ...... ...... ...... 
//启动进程
 Fri Nov 29 09:11:07 2013
 DBW0 started with pid=10, OS id=4902 
Fri Nov 29 09:11:07 2013 
LGWR started with pid=11, OS id=4904
 Fri Nov 29 09:11:07 2013 ...... 

发出“startup nomount”指令后,我们注意到警告日志文件输出了包括一系列参数、 进程的启动等内容;同时,我们注意到 SQLPLUS 终端回显了内存的大小设置(上述深色背景加粗)。

因此,我们首先可以确定的是,在该阶段 Oracle 实例分配了内存,启动了进程。那么,警告日志文件中的参数从哪来呢?下面让我们观察一下初始化参数文件。

2) 初始化参数文件

初始化参数分为两种。静态初始化参数文件和动态初始化参数文件。

静态初始化参数文件(Pfile):文本形式、默认文件名:initsid.ora

动态初始化参数文件(Spfile):二进制形式、默认文件名:spfilesid.ora

也就是说,我们想要了解初始化参数文件的内容,可以使用 vi 工具或者多种操作系统 指令来查看静态初始化参数文件的内容。 如果没有静态初始化参数文件或者动态初始化参数文件(二缺一).

我们可以通过指令来创建初始化参数文件并查看静态初始化参数文件的内容:

 //通过动态初始化参数文件创建静态初始化参数文件
 SQL> create pfile from spfile; File created. 
//通过静态初始化参数文件创建动态初始化参数文件 
SQL> create spfile from pfile; File created.
 [oracle@oracle dbs]$ more initorcl.ora 
orcl.__db_cache_size=251658240 
orcl.__java_pool_size=4194304
 orcl.__large_pool_size=4194304 orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment orcl.__pga_aggregate_target=255852544 orcl.__sga_target=381681664 
......//这里以_开头的为隐含参数,为了使用 ASMM 特性而存在的 *.audit_file_dest='/u01/app/oracle/admin/orcl/adump' 
*.compatible='11.2.0.0.0' *.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fl ash/orcl/orcl/control02.ctl','/u01/app/oracle/oradata/orcl/control03.ctl' *.db_block_size=8192 
*.db_name='orcl' 
*.memory_target=635437056 
*.open_cursors=300 
*.processes=150
 *.remote_login_passwordfile='EXCLUSIVE' 
*.undo_tablespace= "UNDOTBS1" 
......//原来警告日志文件中的参数是从这里(初始化参数文件)来的

4.步骤

  • 1> 验证口令文件,连接 SQL * PLUS
  • 2> 发出 STARTUP NOMOUNT 指令
  • 3> 打开警告日志文件并记录日志
  • 4> 读取初始化参数文件
  • 5> 分配内存、启动进程

当启动实例时,系统首先要读取初始化参数文件,如图 P 1-2所示。

然后根据初始化参数文件的设置分配系统全局区(SGA),并启动 Oracle 后台进程。

另外,操作系统还会打开“警告日志文件”,并且将启动信息存放到“警告日志文件” 中。警告日志存放在初始化参数 background_dump_dest 所对应的目录中,其文件名格为 alertsid.log。

注意:Oracle 默认打开初始化参数文件的顺序是: Spfilesid.ora → spfile.ora → initsid.ora 如果三个文件都不存在,则报错。

5.可执行的相关操作

● 创建数据库

● 创建控制文件

(四)、装载数据库阶段(MOUNTED)

1.打开的文件:控制文件

 //连接到 ORACLE 数据库
 [oracle@oracle ~]$ sqlplus / as sysdba 
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 1 10:58:47 2013 
Copyright (c) 1982, 2005, Oracle. All rights reserved. 
Connected to。
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options
 //查看当前数据库的状态
 SQL> select status from v$instance;
 STATUS
 ------------
 STARTED 
//尝试备份控制文件 
SQL> alter database backup controlfile to '/disk3/orcl/backup/control.bak'
alter database backup controlfile to '/disk3/orcl/backup/control.bak' *
ERROR at line 1: ORA-01507: database not mounted 
//将数据库置为 mount 状态
 SQL> alter database mount; 
Database altered. 
//再次备份控制文件 
SQL> alter database backup controlfile to '/disk3/orcl/backup/control.bak'
Database altered. 

NOMOUNT 状态下无法备份控制文件,MOUNT 状态下备份成功,说明数据库从 NOMOUNT 到 MOUNT 状态读取了控制文件。

装载数据库阶段,系统会按照初始化参数文件中 control_files 参数的设置查找并打开控 制文件。

Oracle 是通过控制文件在实例和数据库之间建立关联的,通过控制文件可以取得数据 文件和重做日志的名称和所处状态。但对数据文件和日志文件是否存在不作检查。

(五)、打开数据库状态(OPEN)

1.打开的文件

1) 数据文件

 //数据库为 MOUNT 状态 
SQL> select status from v$instance; 
//尝试查询数据
 SQL> select count(*)from scott.emp; 
select * from scott.emp* 
ERROR at line 1: ORA-01219: database not open: queries allowed on fixed tables/views only 
//打开数据库
 SQL> alter database open; 
Database altered.
 //再次尝试查询数据 
SQL> select count(*) from scott.emp;
COUNT(*) 
----------
 14 

在 MOUNT 状态下,我们无法读取到数据,说明数据文件没有被读取。当数据库 OPEN 后,我们可以读取到数据,说明数据库从 MOUNT 到 OPEN 加载了数据文件。

2) 联机重做日志文件

//数据库为 MOUNT 状态 
SQL> select status from v$instance; 
//尝试手工切换日志文件组
 SQL> alter system switch logfile; 
alter system switch logfile *
ERROR at line 1:
 ORA-01109: database not open 
//将数据库置为 OPEN 状态
 SQL> alter database open; 
Database altered. 
//再次尝试手工切换日志文件组
 SQL> alter system switch logfile;
 System altered. 

在 MOUNT 状态下,我们无法手工切换日志文件组,说明联机重做日志文件没有被读 取。当数据库 OPEN 后,可以切换,说明数据库从 MOUNT 到 OPEN 加载了日志文件。

(六)、关闭数据库操作

当 DBA 要执行完全数据库备份、修改初始化参数以及其他系统维护操作时,需要停止 Oracle 服务器。

1.数据库关闭方式

Oracle 数据库共有 4 种关闭方式,根据不同的情况,管理员可采用不同的方式关闭数据库。

  • NORMAL:正常关闭方式。
  • TRANSACTIONAL:事务关闭方式。
  • IMMEDIATE:立即关闭方式。
  • ABORT:强制终止关闭方式。

NORMAL、TRANSACTIONAL、IMMEDIATE 三种关闭方式,属于一致性数据库(或称干净数据库)关闭。特点是无需进行数据库恢复,关闭和启动过程如图 P1-2 所示:

ABORT 关闭方式,属于非一致性数据库(或称脏数据库)关闭。使用 ABORT 关闭、或数据库发生实例故障(比如断电)、或使用 STARTUP FORCE 强制重新启动数据库,都需要进行实例恢复。关闭和启动过程如图 P1-3 所示:

四种关闭方式详细描述如下:

1) SHUTDOWN NORMAL

NORMAL 是默认选项。这种方式是被动的等待方式,在所有用户主动退出后,才实施关闭。该选项按照以下条件进行:

  • ? 不能连接新的用户。
  • ? Oracle 服务器等待所有用户断开已存在连接,然后完成关闭。
  • ? 数据库和重做日志缓存写入磁盘。
  • ? 结束后台进程,在内存中释放 SGA。
  • ? 下次启动无需进行实例恢复。

该方式在关闭数据文件、重做日志和控制文件之前,系统首先要发出检查点,同步所有 数据文件、控制文件和重做日志,使得这三种文件处于同步状态。

2) SHUTDOWN TRANSACTIONAL

这种方式将等待所有用户的事务结束,在避免用户修改丢失的前提下,尽快关闭数据库。 该选项按照以下条件进行:

  • ? 在此实例上,客户端不能开始新的事务
  • ? 一旦客户端的当前事务结束,客户即被断开
  • ? 当所有的事务结束,立即进行数据库关闭
  • ? 下次启动无需进行实例恢复。

假定有一个用户正在执行事务操作(INSERT、UPDATE 等),那么当执行 SHUTDOWN TRANSACTIONAL 时系统会处于等待状态。而当该用户执行 COMMIT 或 ROLLBACK 终止 事务之后,系统会自动断开其连接,然后停止 Oracle 服务器。另外,在执行该命令关闭据库之前,与 SHUTDOWN NORMAL 类似,系统也会首先发出检查点,然后才会关闭数据 文件、控制文件和重做日志。

3) SHUTDOWN IMMEDIATE

这种方式无需等待用户的情况下,进行立即关闭。已经提交的事务不会丢失,未提交的 事务被撤销。该选项按照以下条件进行:

  • ? 当前执行的 SQL 语句被取消
  • ? Oracle server 不等待当前连接的用户断开
  • ? Oracle 回退活动事务,并断开所有连接的用户
  • ? Oracle 关闭实例前关闭和卸载数据库
  • ? 下次启动无需进行实例恢复。

假定有一个用户正在执行事务操作(INSERT、UPDATE 等),那么当执行 SHUTDOWN IMMEDIATE 时系统会自动回退该事务操作,然后断开用户连接,最后停止 Oracle 服务器。 另外,在执行该命令关闭数据库之前,与 SHUTDOWN NORMAL 类似,系统也会首先发出 检查点,然后才会关闭数据文件、控制文件和重做日志。

4) SHUTDOWN ABORT

SHUTDOWN ABORT 命令用于快速停止 Oracle 服务器,属于异常终止数据库,例如实例出现故障或使用其他三种方式无法停止 Oracle 服务器,可以考虑采用这种方式。该选项按照以下条件进行:

  • ? 当前执行的 SQL 语句被取消
  • ? Oracle server 不等待当前连接的用户断开
  • ? 数据库和重做日志缓存不写入磁盘。
  • ? 没有提交的事务不回滚
  • ? 在不关闭文件的情况下结束实例
  • ? 数据库不关闭和卸载
  • ? 下次启动需要进行实例恢复,恢复自动发生。

因为采用这种方式不会发出检查点,从而使得数据文件、控制文件和重做日志处于不一 致的状态,所以将来在启动 Oracle 服务器时,后台进程 SMON 会自动进行实例恢复,最终 将数据文件、控制文件和重做日志恢复到一致状态。大家在使用 Oracle 服务器时,尽可能 不要使用 SHUTDOWN ABORT 命令停止 Oracle 服务器。如果系统并发事务很多,而又执 行了 SHUTDOWN ABORT 命令停止 Oracle 服务器,那么因为需要进行实例恢复,所以可能会导致 Oracle 服务器启动时间很长。

注意:在数据库不一致的状态下不能进行数据库的备份

四种关闭方式的特点总结如下表(√是,×否):

2.数据库关闭操作

停止 Oracle 服务器是使用命令 SHUTDOWN 来完成的,执行该命令要求用户必须具有 SYSDBA 或 SYSOPER 特权。其命令格式如下:

 SHUTDOWN [NORMAL | TRANSACTIONAL | IMMEDIATE | ABORT ] 
  • ? NORMAL:正常关闭方式。
  • ? TRANSACTIONAL:事务关闭方式。
  • ? IMMEDIATE:立即关闭方式。
  • ? ABORT:强制终止关闭方式。

默认的关闭模式是 NORMAL。


写在最后的话

感谢各位的支持与阅读,后续会继续推送相关知识和交流,欢迎交流和关注,感谢!

相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: