物理结构的重做日志文件

物理结构的重做日志文件,第1张

Log File物理结构

从 ib_logfile0和 ib_logfile1这两个文件的物理结构可以看出,在Log Header部分还是有些许差异的, ib_logfile0会多一些额外的信息,主要是checkpoint信息。

并且每个Block的单位是512字节,对应到磁盘每个扇区也是512字节,因此redo log写磁盘是原子写,保证能够写成功,而不像index page一样需要double write来保证安全写入。

我们依次从上到下来看每个Block的结构

Log File Header Block

Log Goup ID,可能会配置多个redo组,每个组对应一个id,当前都是0,占用4字节

Start LSN,这个redo log文件开始日志的lsn,占用8字节

Log File Number,总是为0,占用4字节

Created By,备份程序所占用的字节数,占用32字节

另外在ib_logfile0中会有两个checkpoint block,分别是 LOG_CHECKPOINT_1/ LOG_CHECKPOINT_2,两个记录InnoDB Checkpoint信息的字段,分别从文件头的第二个和第四个block开始记录,并且只在每组log的第一个文件中存在,组内其他文件虽然没有checkpoint相关信息,但是也会预留相应的空间出来。这里为什么有两个checkpoint的呢?原因是设计为交替写入,避免因为介质失败而导致无法找到可用的checkpoint的情况。

Log blocks

请点击输入图片描述

log block结构分为日志头段、日志记录、日志尾部

Block Header,占用12字节

Data部分

Block tailer,占用4字节

Block Header

这个部分是每个Block的头部,主要记录的块的信息

Block Number,表示这是第几个block,占用4字节,是通过LSN计算得来的,占用4字节

Block data len,表示该block中有多少字节已经被使用了,占用2字节

First Rec offet,表示该block中作为第一个新的mtr开始的偏移量,占用2字节

Checkpoint number,表示该log block最后被写入时的检查点的值,占用4字节

exp/imp属于逻辑备份;处理起来速度有点慢。

你可以尝试关机后将数据文件,控制文件,日志文件等全部copy出去备份起来,这叫冷备份。

等弄完系统后,再安装一个跟当前oracle的sid一样的oracle实例,将对应文件copy上去就可以了。

参考1: exp迁移数据库实例

环境描述:

源数据库

Oracle服务器版本: Oracle9.2.0.8

数据库名称 db_name = oradb instance_name=oradb

*** 作系统版本: windows 2003

实例安装位置: $oracle_base = e:\oracle

目标数据库

Oracle服务器版本: Oracle9.2.0.8

数据库名称 db_name = orcl instance_name=orcl

*** 作系统版本: windows xp

实例安装位置: $oracle_base = d:\oracle

执行步骤.

一, 数据库名称和sid要求相同

1.1 数据库名称的相关概念

一, 数据库名

数据库名是数据库的身份z号码, 用于表示一个数据库. 在参数文件(?/database/initSID.ora)中用DB_NAME表示.

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='oradb'

*.instance_name='oradb'

数据库名是在安装数据库, 创建新的数据库, 创建数据控制文件, 修改数据库结构, 备份与恢复数据库时都需要使用到的.

查询数据库名称:

 Select name, dbid from v$database

 Show parameter db_name

 查看参数文件initsid.ora

二, 数据库实例名

数据库实例名是用户和 *** 作系统进行联系的标识, 也就是说数据库和 *** 作系统之间的交互使用的是数据库实例名.

实例名在参数文件中也存在, 该参数为instance_name.

数据库名和实例名可以相同也可以不同, 在一般情况下, 数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中, 数据库名和实例名是一对多的关系.

查询当前数据库实例名.

 使用sql语句. Select instance_name from v$instance

 使用show命令. Show parameter instance_name

 查看参数文件initsid.ora.

数据库实例名和oracle_sid两者都表示oracle实例, 但是有区别的. Instance_name是oracle数据库参数. 而oracle_sid是 *** 作系统的环境变量. Oracle_sid用于于 *** 作系统交互, 也就是说, 从 *** 作系统角度访问实例名, 必须通过oracle_sid.

Oracle_sid和instance_name必须是一致的, 否则用户将会受到一个错误. 在unix平台, 是oracle not available, 在winnt平台, 是tns, 协议适配器错误.

三, 数据库域名与全局数据库名

随着由多个数据库构成的分布式数据库的普及, 单一的db_name表示的数据库命名方式给数据库的管理造成了一定的负担. 因为分布式环境下的数据库名字可能一样, 造成管理上的混乱.

为了解决这种情况, 引入了db_domain参数, 这样在数据库的标识是由db_name和db_domain两个参数共同决定的. 避免了因为数据库重名而造成管理上的混乱.

查询数据库域名.

 使用sql命令 select value from v$parameter where name = ‘db_domain’

 使用show命令 show parameter domain

 查看参数文件initsid.ora

四, 数据库服务名

该参数是oracle8i新引入的. 在8i之前, 我们用sid来表示数据库的一个实例, 但是在oracle的并行环境中, 一个数据库对应多个实例, 这样就需要多个网络服务名, 设置繁琐. 为了方便并行环境中的设置, 引进了service_name参数. 该参数对应一个数据库, 而不是一个实例. 该参数的初始值为db_name.db_domain, 即等于global_name. 如果数据库有域名, 则数据库服务器名就是全局数据库名否则, 数据库服务名与数据库名相同.

查询数据库服务名的方法.

使用sql语句: select value from v$parameter where name = ‘service_name’

使用show命令: show parameter service_name

查看参数文件: 在参数文件initsid.ora中查询.

五, 网络服务名

网络服务名, 又称为数据库别名, 是客户端程序访问数据库时需要的配置. 屏蔽客户端如何连接到服务器端的细节, 实现了数据库的位置透明的特性. 网络服务名被记录在tnsnames.ora文件中.

六, 总结

Oracle中各种命名的比较.

名称 查询方式

Db_name Select name from v$database

Instance_name Select instance_name from v$instance

Oracle_sid 值和instance_name相同

Db_domain Select value from v$parameter where name = ‘db_domain’

Global_name Db_name.db_dommain

Service_name Select value from v$parameter where name=’service_name’

Net_service_name 检查tnsnames.ora文件

1.2 修改oracle数据库的db_name和sid

一,用oracle自带的工具nid改数据库名

在本例中,假设原来的数据库名为orcl, 要改成oradb, 原实例名(service_name, instance_name)orcl要改成oradb。

Nid是自带的工具, 在oracle_home/bin目录下, 以下方法假设登陆到需要修改db_name的数据库服务器本地处理。

1, 在mount状态下使用nid修改sid

C:\Documents and Settings\Administrator>sqlplus /nolog

SQL>conn / as sysdba

SQL>shutdown immediate

SQL>startup mount -- nid需要在mount状态下处理。

SQL>host nid target=/ dbname=oradb

处理过程中需要与用户执行一次交互。

Change database ID and database name ORCL to ORADB? (Y/[N]) =>Y

2, 在mount状态下修改db_name

完成上述 *** 作后需要再次启动到mount状态修改参数文件。

SQL>shutdown immediate

SQL>startup mount

SQL>alter system set db_name=oradb scope=spfile

SQL>shutdown immediate

3, 重建pwdsid.ora文件

Passwd文件通常放在oracle_home/database下, 文件命名形式为pwdsid.ora, sid为实例名(instance_name)

SQL>host orapwd file=D:\oracle\ora92\database\pwdorcl.ora password=sys_47522341 entries=5

4, 开启数据库(要open resetlogs)

SQL>startup mount

SQL>alter database open resetlogs

5, 检查修改后的结果

SQL>select name from v$database

二, 使用oradim工具修改instance_name

执行完步骤一中的 *** 作后, 数据库db_name变为oradb, 但instance_name依然还是orcl。 这个名称需要使用oracle的oradim工具进行修改。

1, 如果是windows系统, 先要将所有的oracle服务关闭, 否则会出错。

2, 将之前的instance_name删除

C:\Documents and Settings\Administrator>oradim -delete -sid orcl

3, 创建密码文件

SQL>host orapwd file=D:\oracle\ora92\database\pwdoradb.ora password=sys_47522341 entries=5

4, 创建一个新的sid。

C:\Documents and Settings\Administrator>oradim -new -sid oradb

C:\Documents and Settings\Administrator>oradim -new -sid oradb

5, 进入oracle并创建spfile

设置环境变量oracle_sid=oradb

C:\Documents and Settings\Administrator>set oracle_sid = oradb

修改spfile里实例信息(包含路径里的zs改为zstest,OS目录zs改为zstest)

//如果此处不修改路径中的zs到zstest则后面应无需重建控制文件

C:\Documents and Settings\Administrator>sqlplus sys/admin as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 7月 3 16:23:16 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

已连接到空闲例程。

//先从spfile创建pfile

SQL>create pfile='D:\oracle\product\10.2.0\admin\zs\pfile\init080703.ora' from

spfile='D:\oracle\product\10.2.0\db_1\database\SPFILEZS.ORA'

文件已创建。

//调整pfile里的参数后再创建spfile

SQL>create spfile='D:\oracle\product\10.2.0\db_1\database\SPFILEZSTEST.ORA' fro

m pfile='D:\oracle\product\10.2.0\admin\zstest\pfile\init080703.ora'

文件已创建。

5)更改listener.ora和tnsnames.ora并重启listener

直接编辑这两个文件将里面的sid_name、dbname和service_name都改为zstest

6)因为更改了OS数据库目录路径(zs改为zstest)所以需要重建controlfiles

//创建控制文件的脚本可以再旧数据库的时候使用如下语句获得:

alter database backup controlfile to trace as 'd:\controlfile.txt'

再做修改即可使用。

SQL>CREATE CONTROLFILE REUSE DATABASE "ZSTEST" RESETLOGS ARCHIVELOG

2 MAXLOGFILES 16

3 MAXLOGMEMBERS 3

4 MAXDATAFILES 100

5 MAXINSTANCES 8

6 MAXLOGHISTORY 292

7 LOGFILE

8GROUP 1 (

9 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\REDO01A.LOG',

10 'E:\ORADATA\ZSTEST\REDO01B.LOG'

11) SIZE 250M,

12GROUP 2 (

13 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\REDO02A.LOG',

14 'E:\ORADATA\ZSTEST\REDO02B.LOG'

15) SIZE 250M,

16GROUP 3 (

17 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\REDO03A.LOG',

18 'E:\ORADATA\ZSTEST\REDO03B.LOG'

19) SIZE 250M

20 DATAFILE

21'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\SYSTEM01.DBF',

22'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\UNDOTBS01.DBF',

23'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\SYSAUX01.DBF',

24'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\USERS01.DBF',

25'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\EXAMPLE01.DBF',

26'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\ZSKJ_DATA01.DBF',

27'E:\ORADATA\ZSTEST\ZSKJ_DATA02.DBF',

28'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\ZS_DATA01.DBF',

29'E:\ORADATA\ZSTEST\ZS_DATA02.DBF',

30'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\ZS_IDXDATA01.DBF',

31'E:\ORADATA\ZSTEST\ZS_IDXDATA02.DBF',

32'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST\ZSKJ_IDXDATA01.DBF',

33'E:\ORADATA\ZSTEST\ZSKJ_IDXDATA02.DBF'

34 CHARACTER SET ZHS16GBK

控制文件已创建。

SQL>alter database open resetlogs

数据库已更改。

//重建完控制文件记得要重新启用temp表空间,再trace的控制文件脚本里有提示

SQL>ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZSTEST

\TEMP01.DBF'

2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 524288000 MAXSIZE 32767M

表空间已更改。

二, 镜像迁移数据文件,控制文件以及归档日志文件

2.1 数据文件存储位置

视图 v$datafile

Select file#, name from v$datafile

2.2 控制文件存储位置

视图 v$controlfile

Select name from v$controlfile

2.3 联机重做日志文件存储位置

视图 v$logfile

Select * from v$logfile

三, 镜像跟踪文件和警告文件到目标数据库

如果源数据库的安装路径和目标数据库不一致, 则需要在源数据库中先使用spfilesid.ora创建一个initsid.ora, 然后到目标数据库中修改initsid.ora对应文件的配置. 然后再创建一个spfile.ora.

3.1 在源数据库中创建pfile.

SQL>create pfile='E:\oracle\admin\oradb\pfile\initoradb20090922.ora' from spfile='E:\oracle\ora92\database\spfileoradb.ora'

3.2 将跟踪文件和警告文件镜像到目标数据库

源数据库路径.

$oracle_base/admin

3.3 在目标数据库中修改pfile

修改在3.1中生成的pfile文件initoradb20090922.ora, 将其中与目标数据库配置路径不同的地方替换为目标数据库中对应的路径

3.4 常见的手工修改spfile的错误

Oracle的spfile是一个二进制文件, 这个文件不能采用手工修改的方式进行维护. 可以选择的维护方式有两种, 一是在登录到服务器后使用alter system set … scope=both/spfile来实现. 或者是先通过create pfile from spfile.. 然后修改pfile的内容. 之后使用startup pfile=’’启动数据库后,再执行create create spfile from pfile来完成对spfile的修改.

在数据库的迁移中, 只能采用第二种方式.

四, 重新生成控制文件

4.1 在目标数据库中备份控制文件到跟踪文件中

首先,我们使用下述命令备份源数据库的控制文件

SQL>alter database backup controlfile to trace as 'd:\zhanglei.txt'

4.2 修改控制文件中的内容

将上面步骤产生的控制文件中与目标数据库不匹配的内容使用目标数据库的路径替换.

CREATE CONTROLFILE REUSE DATABASE "ORADB" NORESETLOGS ARCHIVELOG

-- SET STANDBY TO MAXIMIZE PERFORMANCE

MAXLOGFILES 50

MAXLOGMEMBERS 5

MAXDATAFILES 100

MAXINSTANCES 1

MAXLOGHISTORY 226

LOGFILE

GROUP 1 'E:\ORACLE\ORADATA\ORADB\REDO01.LOG' SIZE 100M,

GROUP 2 'E:\ORACLE\ORADATA\ORADB\REDO02.LOG' SIZE 100M,

GROUP 3 'E:\ORACLE\ORADATA\ORADB\REDO03.LOG' SIZE 100M

-- STANDBY LOGFILE

DATAFILE

'E:\ORACLE\ORADATA\ORADB\SYSTEM01.DBF',

'E:\ORACLE\ORADATA\ORADB\UNDOTBS01.DBF',

'E:\ORACLE\ORADATA\ORADB\CWMLITE01.DBF',

'E:\ORACLE\ORADATA\ORADB\DRSYS01.DBF',

'E:\ORACLE\ORADATA\ORADB\EXAMPLE01.DBF',

'E:\ORACLE\ORADATA\ORADB\INDX01.DBF',

'E:\ORACLE\ORADATA\ORADB\ODM01.DBF',

'E:\ORACLE\ORADATA\ORADB\TOOLS01.DBF',

'E:\ORACLE\ORADATA\ORADB\USERS01.DBF',

'E:\ORACLE\ORADATA\ORADB\XDB01.DBF',

'E:\ORACLE\ORADATA\ORADB\ASSM.DBF',

'E:\ORACLE\ORADATA\ORADB\PERFSTAT01.DBF',

'E:\ORACLE\ORADATA\ZHANGLEI.DBF',

'E:\ORACLE\ORADATA\ORADB\CTL01.DBF'

CHARACTER SET ZHS16GBK

4.3 在目标数据库中执行替换后的控制文件

将上面替换后的sql语句拿到目标数据库中进行执行

完成后, 可以使用下面的语句打开数据库.

Sql>alter database open resetlogs

4.4 生成spfile文件

SQL>create spfile='D:\oracle\ora92\database\spfileoradb.ora' from pfile='D:\oracle\admin\oradb\pfile\initoradb20090922.ora'

4.5 重启数据库完成数据库迁移

到这一步完成, 数据库已经迁移成功.

重新启动数据库, 使用spfile登录.

SQL>shutdown immediate

SQL>startup

数据库文件系统包括:

data file (数据文件)

log file (日志文件)

control file (控制文件,用来连接实例与database)

系统文件主要就这三种。给你找了个详细答案,以oracle数据库为例

如下:

1、控制文件(参数文件init.ora记录了控制文件的位置)

控制文件包括如下主要信息

数据库的名字,检查点信息,数据库创建的时间戳

所有的数据文件,联机日志文件,归档日志文件信息

备份信息等

有了这些信息,Oracle就知道那些文件是数据文件,现在的重做日志文件是哪些,这些都是系统启动和运行的基本条件,所以他是Oracle运行的根本。如果没有控制文件系统是不可能启动的。控制文件是非常重要的,一般采用多个镜相复制来保护控制文件,或采用RAID来保护控制文件。控制文件的丢失,将使数据库的恢复变的很复杂。

控制文件信息可以从V$Controlfile中查询获得

2、数据文件(数据文件的详细信息记载在控制文件中)

可以通过如下方式查看数据文件

SQL>select name from v$datafile

NAME

---------------------------------------------

/u05/dbf/PROD/system_01.dbf

/u06/dbf/PROD/temp_01.dbf

/u04/dbf/PROD/users_01.dbf

/u09/dbf/PROD/rbs_01.dbf

/u06/dbf/PROD/applsys_indx_01.dbf

/u05/dbf/PROD/applsys_data_01.dbf

从以上可以看出,数据文件大致可以分为以下几类:

i. 系统数据文件(system_01.dbf)

存放系统表和数据字典,一般不放用户的数据,但是用户脚本,如过程,函数,包等却是保存在数据字典中的。

名词解释:数据字典 数据字典是一些系统表或视图,他存放系统的信息,他包括数据库版本,数据文件信息,表与索引等段信息,系统的运行状态等各种和系统有关的信息和用户脚本信息。数据库管理员可以通过对数据字典的查询,就可以了解到Oracle的运行状态。

ii. 回滚段文件(rbs_01.dbf)

如果数据库进行对数据的修改,那么就必须使用回滚段,回滚段是用来临时存放修改前的数据(Before Image)。回滚段通常都放在一个单独的表空间上(回滚表空间),避免表空间碎片化,这个表空间包含的数据文件就是回滚数据文件。

iii. 临时数据文件(temp_01.dbf)

主要存放用户的排序等临时数据,与回滚段相似,临时段也容易引起表空间碎片化,而且没有办法在一个永久表空间上开辟临时段,所以就必须有一个临时表空间,它所包含的数据文件就是临时数据文件,主要用于不能在内存上进行的排序 *** 作。我们必须为用户指定一个临时表空间。

iv. 用户数据文件(/applsys_data_01.dbf ,applsys_indx_01.dbf)

存放用户数据,这里列举了两类常见的用户型数据,一般数据和索引数据,一般来说,如果条件许可的话,可以考虑放在不同的磁盘上。

3、重做日志文件(联机重做日志)

用户对数据库进行的任何 *** 作都会记录在重做日志文件。在了解重做日志之前必须了解重做日志的两个概念,重做日志组和重做日志组成员(Member),一个数据库中至少要有两个日志组文件,一组写完后再写另一组,即轮流写。每个日志组中至少有一个日志成员,一个日志组中的多个日志成员是镜相关系,有利于日志文件的保护,因为日志文件的损坏,特别是当前联机日志的损坏,对数据库的影响是巨大的。

联机日志组的交换过程叫做切换,需要特别注意的是,日志切换在一个优化效果不好的数据库中会引起临时的“挂起”。挂起大致有两种情况:

在归档情况下,需要归档的日志来不及归档,而联机日志又需要被重新利用

检查点事件还没有完成(日志切换引起检查点),而联机日志需要被重新利用

解决这种问题的常用手段是:

i.增加日志组

ii.增大日志文件成员大小

通过v$log可以查看日志组,v$logfile可以查看具体的成员文件。

4、归档日志文件

Oracle可以运行在两种模式之中,归档模式和不归档模式。如果不用归档模式,当然,你就不会有归档日志,但是,你的系统将不会是一个实用系统,特别是不能用于生产系统,因为你可能会丢失数据。但是在归档模式中,为了保存用户的所有修改,在重做日志文件切换后和被覆盖之间系统将他们另外保存成一组连续的文件系列,该文件系列就是归档日志文件。

有人或许会说,归档日志文件占领我大量的硬盘空间,其实,具体想一想,你是愿意浪费一点磁盘空间来保护你的数据,还是愿意丢失你的数据呢?显而义见,我们需要保证我们的数据的安全性。其实,归档并不是一直占领你的磁盘空间,你可以把她备份到磁带上,或则删除上一次完整备份前的所有日志文件。

5、初始化参数文件

initSID.ora或init.ora文件,因为版本的不一样,其位置也可能会不一样。在8i中,通常位于$ORACLE_HOME/admin//Pfile下,初始化文件记载了许多数据库的启动参数,如内存,控制文件,进程数等,在数据库启动的时候加载(Nomount时加载),初始化文件记录了很多重要参数,对数据库的性能影响很大,如果不是很了解,不要轻易乱改写,否则会引起数据库性能下降。

6、其他文件

i . 密码文件

用于Oracle 的具有sysdba权限用户的认证.

ii. 日志文件

报警日志文件(alert.log或alrt.ora)

记录数据库启动,关闭和一些重要的出错信息。数据库管理员应该经常检查这个文件,并对出现的问题作出即使的反应。你可以通过以下SQL 找到他的路径select value from v$PARAMETER where name ="background_dump_dest"

后台或用户跟踪文件

系统进程或用户进程出错前写入的信息,一般不可能读懂,可以通过ORACLE的TKPROF工具转化为可以读懂的格式。对于系统进程产生的跟踪文件与报警日志文件的路径一样,用户跟踪文件的路径,你可以通过以下SQL找到他的路径select value from v$PARAMETER where name ="user_dump_dest"


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8091972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存