如何启动或关闭数据库的归档模式

如何启动或关闭数据库的归档模式,第1张

1)单机模式下:

如果开启归档,请保证

log_archive_start=true --开启自动归档,否则只能手工归档,如果是关闭了归档,则设置该参数为false。10g之后废除该参数,不需要设置。

log_archive_dest =<archivelog存放路径> ---归档日志存放路径

alter system set log_archive_dest_1="location=f:\disk5\offlinelog\mandatory" scope=spfile; ---为了增加归档日志的冗余来保证其安全,可以通过修改参数文件中的log_archive_dest_n参数,其中n为1~10

log_archive_format ="CX%TS%SARC" ---归档日志文件名格式

alter system set log_archive_max_processes = 3 ---启动多个归档后台进程以避免由于ARCn进程跟不上LGWR而造成的数据库系统效率的下降。

注意:如果是OPS/RAC环境,需要先把parallel_server = true注释掉,然后执行如下步骤,最后用这个参数重新启动

1、开启归档:

a 关闭数据库shutdown immediate

b startup mount

c alter database archivelog

d alter database opne

2、关闭归档:

a 关闭数据库shutdown immediate

b startup mount

c alter database noarchivelog

d alter database open

归档信息可以通过如下语句查看

SQL> archive log list

Database log mode Archive Mode

Automatic archival Enabled

Archive destination E:oracleora92databasearchive

Oldest online log sequence 131

Next log sequence to archive 133

Current log sequence 133

2)RAC模式下:

1关闭所有的instance

2在节点1上设置以下参数,如果使用spfile就先生成pfile再修改

CLUSTER_DATABASE=FALSE

log_archive_dest=<归档路径>

log_archive_start=true

log_archive_format=<归档文件格式>

3 以exclusive模式启动数据库

SQL> startup mount exclusive pfile=‘xxxxxx’

4 启动归档模式

SQL> Alter database archivelog

5打开数据库

SQL> alter database open

6关闭数据库并修改初始化参数

SQL> shutdown immediate

CLUSTER_DATABASE=TRUE

7启动所有的instance,记得先生成spfile

8核对归档,模式是否启动

SQL> archive log list

======================

以下步骤在node1机器上 *** 作,node2保持down。在所有的 *** 作完成后再打开node2的数据库。。。

SQLPLUS>connect SYS/PASSWORD

SQLPLUS>ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE; ### 10gR2之后不用修改该参数

SQLPLUS>shutdown immediate;

SQLPLUS>startup mount exclusive;

SQLPLUS>alter database noarchivelog;

SQLPLUS>ALTER SYSTEM SET CLUSTER_DATABASE=TRUE SCOPE=SPFILE;

SQLPLUS>shutdown immediate;

SQLPLUS>STARTUP

非归档改为归档

SQLPLUS>connect SYS/PASSWORD

SQLPLUS>ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE;

SQLPLUS>shutdown immediate;

SQLPLUS>startup mount exclusive;

SQLPLUS>alter database archivelog;

SQLPLUS>ALTER SYSTEM SET CLUSTER_DATABASE=TRUE SCOPE=SPFILE;

SQLPLUS>shutdown immediate;

SQLPLUS>STARTUP

====================

相关数据字典

V$ARCHIVED_LOG

V$ARCHIVE_DEST

V$LOG_HISTORY

V$DATABASE

使用工具pt-archiver

原理解析

作为MySQL DBA,可以说应该没有不知道pt-archiver了,作为pt-toolkit套件中的重要成员,往往能够轻松帮助DBA解决数据归档的问题。例如线上一个流水表,业务仅仅只需要存放最近3个月的流水数据,三个月前的数据做归档即可,那么pt-archiver就可以轻松帮你完成这件事情,甚至你可以配置成自动任务,无需人工干预。

作为DBA,我们应该知其然更应该知其所以然,这样我们也能够放心地使用pt工具。相信很多DBA都研究过pt-online-schema-change的原理,那么今天我们深入刨一刨pt-archiver的工作原理。

一、原理观察

土人有土办法,我们直接开启general log来观察pt-archiver是如何完成归档的。

命令

pt-archiver --source h=127001,u=xucl,p=xuclxucl,P=3306,D=xucl,t=t1 --dest h=127001,P=3306,u=xucl,p=xuclxucl,D=xucl_archive,t=t1 --progress 5000 \

--statistics --charset=utf8mb4 --limit=10000 --txn-size 1000 --sleep 30

常用选项

--analyze

指定工具完成数据归档后对表执行'ANALYZE TABLE' *** 作。指定方法如'--analyze=ds',s代表源端表,d代表目标端表,也可以单独指定。

--ask-pass

命令行提示密码输入,保护密码安全,前提需安装模块perl-TermReadKey。

--buffer

指定缓冲区数据刷新到选项'--file'指定的文件并且在提交时刷新。

只有当事务提交时禁用自动刷新到'--file'指定的文件和刷新文件到磁盘,这意味着文件是被 *** 作系统块进行刷新,因此在事务进行提交之前有一些数据隐式刷新到磁盘。默认是每一行 *** 作后进行文件刷新到磁盘。

--bulk-delete

指定单个语句删除chunk的方式来批量删除行,会隐式执行选项'--commit-each'。

使用单个DELETE语句删除每个chunk对应的表行,通常的做法是通过主键进行逐行的删除,批量删除在速度上会有很大的提升,但如果有复杂的'WHERE'条件就可能会更慢。

--[no]bulk-delete-limit

默认值:yes

指定添加选项'--bulk-delete'和'--limit'到进行归档的语句中。

--bulk-insert

使用LOAD DATA LOCAL INFILE的方法,通过批量插入chunk的方式来插入行(隐式指定选项'--bulk-delete'和'--commit-each')

而不是通过逐行单独插入的方式进行,它比单行执行INSERT语句插入的速度要快。通过隐式创建临时表来存储需要批量插入的行(chunk),而不是直接进行批量插入 *** 作,当临时表中完成每个chunk之后再进行统一数据加载。为了保证数据的安全性,该选项会强制使用选项'--bulk-delete',这样能够有效保证删除是在插入完全成功之后进行的。

--channel

指定当主从复制环境是多源复制时需要进行归档哪个主库的数据,适用于多源复制中多个主库对应一个从库的情形。

--charset,-A

指定连接字符集。

--[no]check-charset

默认值:yes

指定检查确保数据库连接时字符集和表字符集相同。

--[no]check-columns

默认值:yes

指定检查确保选项'--source'指定的源端表和'--dest'指定的目标表具有相同的字段。

不检查字段在表的排序和字段类型,只检查字段是否在源端表和目标表当中都存在,如果有不相同的字段差异,则工具报错退出。如果需要禁用该检查,则指定'--no-check-columns'。

--check-slave-lag

指定主从复制延迟大于选项'--max-lag'指定的值之后暂停归档 *** 作。默认情况下,工具会检查所有的从库,但该选项只作用于指定的从库(通过DSN连接方式)。

--check-interval

默认值:1s

如果同时指定了选项'--check-slave-lag',则该选项指定的时间为工具发现主从复制延迟时暂停的时间。每进行 *** 作100行时进行一次检查。

--columns,-c

指定需要归档的表字段,如有多个则用','(逗号)隔开。

--commit-each

指定按每次获取和归档的行数进行提交,该选项会禁用选项'--txn-size'。

在每次获取表数据并进行归档之后,在获取下一次数据和选项'--sleep'指定的休眠时间之前,进行事务提交和刷新选项'--file'指定的文件,通过选项'--limit'控制事务的大小。

--host,-h

指定连接的数据库IP地址。

--port,-P

指定连接的数据库Port端口。

--user,-u

指定连接的数据库用户。

--password,-p

指定连接的数据库用户密码。

--socket,-S

指定使用SOCKET文件连接。

--databases,-d

指定连接的数据库

--source

指定需要进行归档 *** 作的表,该选项是必须指定的选项,使用DSN方式表示。

--dest

指定要归档到的目标端表,使用DSN方式表示。

如果该选项没有指定的话,则默认与选项'--source'指定源端表为相同表。

--where

指定通过WHERE条件语句指定需要归档的数据,该选项是必须指定的选项。不需要加上'WHERE'关键字,如果确实不需要WHERE条件进行限制,则指定'--where 1=1'。

--file

指定表数据需要归档到的文件。使用类似MySQL DATE_FORMAT()格式化命名方式。

文件内容与MySQL中SELECT INTO OUTFILE语句使用相同的格式,文件命名选项如下所示:

%Y:年,4位数(Year, numeric, four digits)

%m:月,2位数(Month, numeric (0112))

%d:日,2位数(Day of the month, numeric (0131))

%H:小时(Hour (0023))

%i:分钟(Minutes, numeric (0059))

%s:秒(Seconds (0059))

%D:数据库名(Database name)

%t:表名(Table name)

二、原理解析

根据general log的输出,我们整理出时序表格如下

三、其他说明

咋一看这个过程貌似也没有什么问题,但是,假如在原表扫描出数据,插入到新表的过程中,旧数据发生了变化怎么办?

带着这个疑问,我们进行了源码的跟踪,我们在pt-archiver的6839行打上了断点

然后我分别在几个session窗口做了如下动作

最后pt-archiver输出如下:

# A software update is available:

TIME ELAPSED COUNT

2020-04-08T09:13:21 0 0

2020-04-08T09:13:21 0 1

Started at 2020-04-08T09:13:21, ended at 2020-04-08T09:13:51

Source: A=utf8mb4,D=xucl,P=3306,h=127001,p=,t=t1,u=xucl

Dest: A=utf8mb4,D=xucl_archive,P=3306,h=127001,p=,t=t1,u=xucl

SELECT 1

INSERT 1

DELETE 1

Action Count Time Pct

sleep 1 300002 9989

inserting 1 00213 007

commit 2 00080 003

select 2 00017 001

deleting 1 00005 000

other 0 00008 000

很明显,id=3这条记录并没有进行归档(我们这里是改了条件列,实际生产中可能是更改了其他列,造成归档数据不准确)

那么如何来解决这种情况的发生呢?

显然,数据库在数据库中可以通过加排它锁来防止其他程序修改对应的数据,pt-archiver其实早就已经帮我们考虑到了这样的情况,pt-archiver提供了两种选择

--for-update:Adds the FOR UPDATE modifier to SELECT statements

--share-lock:Adds the LOCK IN SHARE MODE modifier to SELECT statements

四、总结

pt-archiver作为归档工具无疑是MySQL DBA日常运维的大利器之一,在使用过程中在知道如何使用的基础上也能够知晓其原理

归档过程中最好能对归档记录进行加锁 *** 作,以免造成归档数据不准确

在主从环境中,归档过程最好控制速度,以免造成主从延迟

尽量控制好chunk的大小,不要过大,造成大事务

和数据库的启动有关,

mount 装载数据库涉及以下任务:

• 将数据库与以前启动的实例关联

• 定位并打开参数文件中指定的控制文件

• 通过读取控制文件来获取数据文件和联机重做日志文件的名称和状态

当前状态下oracle可以进行特定维护,也就是为这些 *** 作做好了足够的物理准备。比如修改归档与非归档模式。

Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些 *** 作都会记录在联机重做日志里。一般数据库至少要有2个联机重做日志组。当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时候,又会发生日志切换,去写联机重做日志组1,就这样反复进行。

如果数据库处于非归档模式,联机日志在切换时就会丢弃而在归档模式下,当发生日志切换的时候,被切换的日志会进行归档。比如,当前在使用联机重做日志1,当1写满的时候,发生日志切换,开始写联机重做日志2,这时联机重做日志1的内容会被拷贝到另外一个指定的目录下。这个目录叫做归档目录,拷贝的文件叫归档重做日志。

在oracle数据库的开发环境和测试环境中 数据库的日志模式和自动归档模式一般都是不设置的 这样有利于系统应用的调整 也免的生成大量的归档日志文件将磁盘空间大量的消耗 但在系统上线 成为生产环境时 将其设置为日志模式并自动归档就相当重要了 因为 这是保证系统的安全性 有效预防灾难的重要措施 这样 通过定时备份数据库和在两次备份间隔之间的日志文件 可以有效的恢复这段时间的任何时间点的数据 可以在很多时候挽回或最大可能的减少数据丢失 虽然ORACLE数据库的日志模式和自动归档设置并不复杂 但其中的一些概念和 *** 作过程还是容易混淆的 现在根据本人的经验 分析介绍如下 所用环境为UNIX(HPUX SOLARIES AIX TRU UNIX)和ORACLE 一 要使OARCLE数据库进行日志的自动归档 需要做两方面的事情 一是数据库日志模式的设置(database log mode 可为Archive Mode和No Archive Mode) 另外就是自动归档模式设置(Automatic archival 可为Enabled和Disabled) 二 如何查看数据库的现行日志和自动归档模式的设置 可用archive log list命令来查看 例如 运行在日志自动归档模式下的数据库系统查看结果如下(一般是生产环境)SVRMGR> archive log listDatabase log mode Archive ModeAutomatic archival EnabledArchive destination/backup/archivelogOldest online log sequence Next log sequence to archive  Current log sequence  没有启动数据库日志模式和自动归档的数据库系统查看结果如下(一般是测试环境)SVRMGR> archive log listDatabase log mode No Archive ModeAutomatic archival DisabledArchive destination/u /app/oracle/product/ /dbs/archOldest online log sequence Current log sequence  三 数据库日志模式的设置 在创建数据库时 可以在CREATE DATABASE 语句中指定数据库的日志模式 假如没有指明 则缺省为NOARCHIVELOG模式 由于如果在创建数据库时指明是Archive Mode的话 会增加约 %的创建时间 而在以后启动INSTANCE时再设置的话 一般只用去几秒的时间 所以一般在创建数据库时是不设置为ARCHIVE MODE的 如要确定一系统数据库的日志模式设置 除了(二)中的方法外也可以执行如下 *** 作查看 SVRMGR> Select from V$DATABASENAME CREATEDLOG_MODE CHECKPOINT ARCHIVE_CH ORCL  / / : :NOARCHIVELOG  将数据库的日志模式设置切换(Archive Mode 和No Archive Mode之间的切换)的步骤和 *** 作如下 关闭运行的数据库实例SVRMGRL> shutdown在进行日志模式切换之前 必须将运行的数据库正常关闭 备份数据库该备份跟以后产生的日志一起用于将来的灾难恢复(很重要 如要改为归档日志模式 没有这个数据库备份 仅有日志文件是无法从该时间点恢复的) 启动数据库实例到mount状态 但不要打开 SVRMGRL> startup mount注意 如果是使用OPS的话 请只打开一个数据库实例进行模式切换 *** 作 切换数据库日志模式 SVRMGRL> alter database archivelog;(设置数据库为归档日志模式)或SVRMGRL> alter database noarchivelog;(设置数据库为归档日志模式) 打开数据库SVRMGRL> alter database open; 确认数据库现在处于归档日志模式 SVRMGRL> archive log list;Database log mode  Archive ModeAutomatic archival EnabledArchive destination for example: $ORACLE_HOME/dbs/archOldest on line log sequence Next log sequence  Current log sequence 将这个时间点的redo logs归档SVRMGRL> archive log all; 确认新产生的日志文件已在相应的归档目录下面 四 自动归档模式设置(Automatic archival 可为Enabled和Disabled) 在该模式下 数据库启动一个arch进程 专门负责将redo logs写到系统归档设备的相应目录下 在数据库的参数文件中设置参数(一般是在$ORACLE_HOME/dbs/init ora文件中) LOG_ARCHIVE_START=LOG_ARCHIVE_DEST=LOG_ARCHIVE_FORMAT=LOG_ARCHIVE_START:如要求自动归档的话 则设为TRUE 如要求为非自动归档的话 则设为FALSELOG_ARCHIVE_DEST:该参数设定了archive logs 归档存放的路径 LOG_ARCHIVE_FORMAT:该参数设定了archive logs的命名格式 例如 如将格式设为: arch%s arclog 文件将为: arch arc arch arc arch arc这几个参数设置只有在数据库实例启动前设置才能生效 如果在数据库运行中进行设置 要使其生效 必须重起数据库 如果数据库正在运行中 不能即刻重起 要设置其为自动归档模式 则做如下 *** 作 SVRMGRL> ALTER SYSTEM ARCHIVE LOG START;如要设置其为非自动归档模式(取消自动归档) 则 SVRMGRL> ALTER SYSTEM ARCHIVE LOG STOP;但如果数据库重起后 给语句修改的结果就失效了 自动归档的设置还是按照系统参数文件中的LOG_ARCHIVE_START的值来设置 五 几种设置情况 ( ) Database log mode Archive ModeAutomatic archival Enabled这是在大部分生产环境中的ORACLE数据库日志及归档模式设置 这种情况下 做好数据库的定期备份(有热备和冷备)和归档日志备份 可有效的将数据库恢复到有归档日志的全部时间点 ( ) Database log mode Archive ModeAutomatic archival Disabled这种情况下 数据库不能自动归档 需要进行手工归档 如果所有在线日志都写满了 又没有的及时进行手工归档的话 由于LGWR没有可用的在线日志可写 数据库将会挂在这儿 只有进行手工归档后 有可用的在线日志后才能继续 在生产环境中应该避免这种情况 手工归档 *** 作如下 SVRMGRL> ALTER SYSTEM ARCHIVE LOG ALL;数据库将会把在线日志进行归档处理( ) Database log mode NO Archive ModeAutomatic archival Enabled有些相对欠缺经验的管理员在进行设置时 只在数据库参数文件中设置了LOG_ARCHIVE_START=TRUE 然后在数据库起来后查看到ARCH归档进程已经起来了 可是尽管ORACLE已经作了几次日志切换 但还是没有归档日志 这时的设置就是这种情况 如果数据库不是处在ARVHIVELOG模式 redolog 还是不会被归档 ( ) Database log mode NO Archive ModeAutomatic archival Disabled这种设置是刚安装的oracle数据库的缺省设置 开发环境也大部分如此 即没有进行归档 lishixinzhi/Article/program/Oracle/201311/18755

以上就是关于如何启动或关闭数据库的归档模式全部的内容,包括:如何启动或关闭数据库的归档模式、如何实现大数据量数据库的历史数据归档、数据库的归档非归档为什么要在mount模式下修改等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/sjk/10147217.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存