从零开始学习Oracle之控制文件和日志
sinye56 2024-09-29 22:23 11 浏览 0 评论
Oracle控制文件主要用来存放数据库的名字、数据库的位置等信息。日志记录了Oracle数据库日常操作。控制文件和日志文件都存储了Oracle数据库中的重要信息。
1.控制文件简介
控制文件是数据库中最小的文件,是一个二进制文件,其中包括了数据库的结构信息,同时也包括了数据文件和日志文件的一些信息。控制文件虽小,但可以说是Oracle中最重要的文件,只有Oracle进程才能够更新控制文件中的内容。控制文件中主要包括数据库名称、位置、联机或者脱机状态、Redo Log File的位置和名称、表空间名称、Archive Log File信息、CheckPoint信息、Undo信息、RMAN信息等,从控制文件中包含的内容也可以看出控制文件在整个 Oracle 中的重要性。
控制文件在每个数据库中都存在,但是一个控制文件只能属于一个数据库。这就像是工作证,每个员工都有工作证,但是一个工作证只能属于一个员工。在创建数据库时,控制文件被自动创建,如果数据库的信息发生变化,控制文件也会随之改变。控制文件不能手动修改,只能由Oracle数据库本身来修改。控制文件在数据库启动和关闭时都要使用,如果没有控制文件,数据库将无法工作。
2.控制文件的应用案例
2.1查看控制文件的内容
通过数据字典v$controlfile,可以查看控制文件的存放位置和状态。
在数据字典中查看控制文件的存放位置和状态。实现代码如下:
SELECT name,status FROM v$controlfile;
2.2更新控制文件的内容
当数据文件出现增加、重命名和删除等操作时,Oracle服务器会立刻更新控制文件以反映数据库结构的这种变化。每次在数据库的结构发生变化后,为了防止数据丢失都要备份控制文件。各进程根据分工的不同分别把更改后的数据库信息写入到控制文件中:日志写入进程负责把当前日志序列号记录到控制文件中;校验点进程负责把校验点的信息记录到控制文件中;归档进程负责把归档日志的信息记录到控制文件中。
为了应对磁盘损坏等数据灾难的情况,用户可以把控制文件进行镜像操作,这样即使一个文件被破坏,其他的控制文件依然存在,数据也不会丢失,数据库还可以正常运行。
2.3使用init.ora多路复用控制文件
控制文件虽然由数据库直接创建,但是在数据库初始化之前,用户可以修改初始化文件init.ora。要修改init.ora,需要先找到它的存放位置,这个文件的位置在安装目录的admin\orcl\pflie下,如下图所示:
在修改 init.ora文件之前,先通过复制操作把控制文件复制到不同的位置,然后用记事本打开init.ora文件,找到control files参数后即可进行修改。修改时需要注意,在每个控文件之间是通过逗号分隔的,并且每一个控制文件都是用双括号括起来的。在修改控制文件的路径之前,需要把控制文件复制一份进行保存,以免数据库无法启动。
2.4使用SPFILE多路复用控制文件
除了修改init.ora初始化参数的方式可以实现多路复用控制文件外,还可以通过SPFILE方式实现多路复用,它们的原理和修改参数是一样的。
使用SPFILE多路复用控制文件。具体操作步骤如下:
STEP1:修改control files参数。
在确保数据库是打开状态时,使用以下命令修改control_files参数,语句如下:
ALTER SYSTEM SET control_files='文件的路径1',
‘文件的路径2’,
‘文件的路径3’,…,
'文件的路径n' scope=spfile;
STEP2:关闭数据库。
在数据库打开时,数据库中的文件是无法操作的。关闭数据库的命令如下:
shutdown immediate;
STEP3:在DOS下复制文件到指定位置。
在DOS窗口下使用复制命令在指定位置增加一个控制文件。具体命令如下:
copy 旧文件,新文件
STEP4:启动数据库实例并验证。
文件复制完成后,使用startup命令重新启动数据库。
Startup;
在数据字典controlfile中重新查询现存的控制文件,命令如下:
SELECT name, status FROM v$controlfile;
2.5创建控制文件
虽然有多种保护控制的方法,但是仍然不能完全保证控制不出现丢失和损坏的情况。特别是以下两种情况出现时:
- 需要永久地修改数据库的参数设置。
- 当控制文件全部损坏,无法修复时。
手动创建控制文件。具体操作步骤如下:
STEP1:找原有的数据文件和重做日志的路径。
获取数据文件和重做日志路径的方法有两种:
一种方法是,当控制文件没有损坏时,从控制文件中直接获取;
另外一种方法是,如果控制文件损坏了,从数据字典v$datafile
中获取数据文件的信息,从数据字典v$logfile中获取日志文件的信息。
当然,使用上面两种方法的前提是数据库能够正常启动。如果数据库不能正常启动,那么需要根据系统的错误信息来查找原因。在创建新的控制文件并且使用它打开数据库以后,Oracle会对数据字典和控制文件的内容进行检查。如果发现数据字典包含了某个数据文件而控制文件没有列出这个数据文件,Oracle数据库就会报错。数据库管理员可以根据这些信息来判断是否缺少必要的数据文件,一步步查找到真正的数据文件。
获取数据文件的命令如下:
SELECT name FROM v$datafile;
获取日志文件的命令如下:
SELECT member FROM v$logfile;
STEP2:关闭数据库
在创建控制文件之前,需要先关闭数据库。命令如下:
shutdown immediate;
为了保证数据库的安全,关闭数据库后,应该把数据库的日志文件、数据库文件、参数文件等备份到其他硬盘上。
STEP3:创建新的控制文件
把原来的控制文件备份到其他位置后,还需要启动一个数据库实例。启动实例的语句如下:
startup nomount;
参数nomount表示只启动实例。
启动实例后就可以创建控制文件了。创建控制文件的语句如下:
create controlfile
reuse database'数据库实例名'noresetlogs//是否重做日志或重命名数据库noarchivelog//
归档状态
maxlogfiles //最大日志文件大小
maxlogmembers //日志文件组的成员数
maxinstances //最大实例的个数
maxloghistory //最大历史日志文件个数
logfile //日志文件
group1'日志文件的路径1'size 日志文件的大小,
..
groupn、日志文件的路径n'size日志文件的大小
datafile //数据文件
路径1',
...
路径n'
character set we8dec
参数 noresetlogs 表示在创建控制文件时不需要重做日志文件和重命名数据库,否则可以使用 resetlogs 参数。
STEP4:使用SPFILE方法修改init.ora中control files参数。
STEP5:验证控制文件。
重启数据库后,查询v$controlfile数据字典,检查控制文件是否全部正确加载。如果数据库加载不了,可以重新启动数据库服务。验证的命令如下:
SELECT name FROM v$controlfile;
至此,控制文件创建成功。
3.日志简介
Oracle日志主要分为两类包括重做日志文件和归档日志文件。重做日志文件是Oracle数据库正常运行不可缺少的文件。重做日志文件主要记录数据库操作的过程。在需要恢复数据库时,重做日志文件可以从备份还原的数据库上再执行一次,从而达到数据库的最新状态。
Oracle系统在运行时有归档模式和非归档模式。在归档模式下,如果重做日志文件全部写满后,就把第一个重做日志文件写入归档日志文件中,再把日志文件写到第一个重做日志文件中,使用归档方式可以方便以后的恢复操作;在非归档模式下,所有的日志文件都写在重做日志文件中,如果重做日志文件写满了,那么就把前面的日志文件覆盖掉。
在归档模式下,Oracle的性能会受到一定的影响,所以Oracle 默认情况下采用的是非归档模式。获取当前Oracle的归档模式可以从v$database 数据字典中查看。
如果需要查看当前数据库的模式,可以通过查看当前数据库的log_mode的值实现。
查看当前数据库的模式。实现代码如下:
SELECT name, log_mode FROM v$database;
从结果可以看出,当前模式为非归档模式。如果结果为ARCHIVELOG,则表示当前模式为归档模式。
4.管理日志文件
在Oracle数据库中,日志文件全部存放在日志文件组中。
4.1新建日志文件组
通过日志文件组,数据库管理员可以轻松地管理日志文件。创建日志文件组的语法如下:
ALTER DATABASE [database_name]
ADD LOGFILE GROUP n
filename SIZE m;
- 参数database_name为要修改的数据库名,如果省略,表示为当前数据库;
- 参数n为创建日志工作组的组号,组号在日志组中必须是唯一的;
- 参数filename表示日志文件组的存在位置;
- 参数m表示日志文件组的大小,默认情况下大小为50MB。
4.2添加日志文件到日志文件组
添加日志文件和添加日志文件组的语法非常类似。语法规则如下:
ALTER DATABASE [database_name]
ADD LOGFILE MEMMER
filename TO GROUP n;
- 参数database name为要修改的数据库名,如果省略,则表示为当前数据库;
- 参数filename表示日志文件的存在位置;
- 参数n为日志文件填入的组号。
4.3删除日志文件组和日志文件
使用ALTER DATABASE语句可以删除日志文件组,具体的语法规则如下:
ALTER DATABASE [database_name]
DROP LOGFILE
GROUP n;
- 参数n为日志文件组的组号。
删除日志文件的方法与删除日志文件组的方法类似。语法格式如下:
ALTER DATABASE [database name]
DROP LOGFILE MEMBER
filename;
- 参数filename 表示日志文件的名称,当然也包括日志文件的路径。
4.4查询日志文件组和日志文件
用户可以查询已经存在的日志文件组和日志文件。查询日志文件组主要是通过V$LOG来实现。
查询V$LOG中的组号(GROUP#)、成员数(MEMBERS)和状态(STATUS)的信息。实现代码如下:
SELECT GROUP#, MEMBERS,STATUS FROM V$LOG;
查询日志文件主要通过V$LOGFILE来实现,
查询V$LOGFILE中的组号(GROUP#)、成员(MEMBER)的信息。实现代码如下:
SELECT GROUP#, MEMBER FROM V$LOGFILE;
在Oracle 日志文件中,最容易模糊的就是日志文件的3个状态,它们的含义如下:
- current: 表示LGWR正在写的日志文件。
- active:表示LGWR正在写的日志文件,实例恢复时需要这种文件。
- inactive:表示LGWR正在写的日志文件,实例恢复时也不会用到这种文件。
通过参数ARCHIVE LAGTARGET可以控制日志切换的时间间隔,以秒为单位。通过减少时间间隔,从而实现提高日志的切换频率。例如以下代码:
SQL> ALTER SYSTEM SET ARCHIVE_LAG_TARGET=50 SCOPE=both;
通过上面的命令,可以实现日志每50秒切换一次。
相关推荐
- 程序员: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像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)