Oracle 11g打开CDC及维护

项目中需要使用Oracle的增量同步功能,需要打开Oracle的CDC开关,同时涉及到了相应日志的优化工作。

1. 打开归档日志开关(启动LogMiner)

a. 使用有DBA权限的用户登录Oracle
b. 检查数据库日志模式

SQL> select log_mode from v$database;

如果结果是ARCHIVELOG,可以转至步骤2。
如果结果是NOARCHIVELOG,执行下面SQL命令

SQL> shutdown immediate;  # Shut down the database
SQL> startup mount;  # Start up and mount the database
SQL> alter database archivelog; # enable archiving
SQL> alter database open; # open the database

查看存储路径

select dest_id,name from v$archived_log;

2. 启用 Supplemental Logging

为了从日志里获取数据,LogMiner需要启用数据库或表的supplemental logging。Supplemental logging又分为identification key logging和full supplemental logging。Identification key logging只包含主键和发生改变的字段数据,而full supplemental logging包含了所有字段的数据,这两种根据需求选择一种即可。

启用Identification key logging
可以指定一张表启用

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER TABLE <schema name>.<table name> ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

也可以同时为数据库中所有表启用

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

启用full supplemental logging
指定一张表启用

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER TABLE <schema name>.<table name> ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

为数据库中所有表启用

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

提交修改

ALTER SYSTEM SWITCH LOGFILE;

创建用户

在CDC Client源中需要配置账户信息连接Oracle,要求该用户有一定权限,所以这里新建一个用户。

    CREATE USER <user name> IDENTIFIED BY <password>;
    GRANT create session, alter session, execute_catalog_role, select any transaction, select any table to <user name>;
    GRANT select on GV_$DATABASE to <user name>;
    GRANT select on GV_$ARCHIVED_LOG to <user name>;
    GRANT select on V_$LOGMNR_CONTENTS to <user name>;
    GRANT select on <db>.<table> TO <user name>;

用户通过使用V$ARCHIVE_DEST和$ARCHIVE_LOG视图获取归档日志信息。

V$ARCHIVE_DEST:显示当前所有归档日志存储位置及其状态。

V$ARCHIVE_LOG:显示历史归档日志信息。

创建SDC_TEST用户,密码为666666。注意,这里同样需要使用具有DBA权限的用户操作。

    SQL> create user SDC_TEST identified by 666666;
    SQL> grant create session, alter session, execute_catalog_role, select any transaction, select any table to SDC_TEST;
    SQL> grant select on GV_$DATABASE to SDC_TEST;
    SQL> grant select on GV_$ARCHIVED_LOG to SDC_TEST;
    SQL> grant select on V_$LOGMNR_CONTENTS to SDC_TEST;

4. 提取LogMiner Dictionary到redo log

当你希望LogMiner使用来自redo log中的字典时,需要执行此步骤,将字典提取到redo log中,且必须在启动pipeline之前执行。如果使用online catlog中的字典,则不需要。

EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);

5.日常维护

优化一(切换到更大的磁盘):

以dba角色登录: conn / as sysdba
如果挂载有更大的磁盘,可以修改日志目录

alter system set log_archive_dest_1='location=E:\archivelog' scope=spfile;
alter system set log_archive_start=TRUE scope=spfile;

优化二(定时删除过期日志文件,否则会导致数据库无法使用):

新建定时任务执行脚本
#clear_arc.bat
@echo off
@echo start
rman target / nocatalog cmdfile clear.rcv
#clear.rcv
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

问题一:

遇到了用户大量更新操作时,导致archivelog空间使用率是否过高,无法连接Oracle。

报错ORA-00257: archiver error. Connect internal only, until freed。

1.调整日志目录大小限制:

SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;  --查看磁盘占用情况,ARCHIVED LOG空间使用率是否过高

FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE                          0                         0               0
REDO LOG                              0                         0               0
ARCHIVED LOG                      16.34                         0              59


FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
BACKUP PIECE                          0                         0               0
IMAGE COPY                            0                         0               0
FLASHBACK LOG                         0                         0               0

FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
FOREIGN ARCHIVED LOG                  0                         0               0              

已选择7行。
SQL> show parameter recover;  --查看文件存储路径

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      D:\app\Administrator\flash_recovery_area
db_recovery_file_dest_size           big integer 5G
recovery_parallelism                 integer     0
SQL> show parameter db_recovery_file_dest_size;  --查看日志文件占用的(总)空间大小

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size           big integer 5G
SQL> alter system set db_recovery_file_dest_size=10G scope=spfile;   --修改日志文件占用的(总)空间大小

系统已更改。

SQL> shutdown immediate  --重启数据库生效配置
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
数据库装载完毕。
数据库已经打开。
SQL> show parameter db_recovery_file_dest_size;  --查看日志文件占用的(总)空间大小

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size           big integer 10G

2.删除过期日志

$ rman   --清空归档日志方式
RAM> connect target /
RAM> crosscheck archivelog all;  --查看所有的归档文件
-- 清空策略一
-- 如何确认归档日志是否过期,rman有一个保留策略,可以定义多少天之前的日志算为过期;
RAM> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;  --让恢复窗口成为7天大小。
RAM> delete expired archivelog all; --清空过期的归档文件
-- 清空策略二
RAM> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';  --或者直接使用删除命令,清楚7天前数据。

RAM> show all; --查看所有的rman策略.

SQL> select count(*) from v$archived_log where archived='YES' and deleted='NO'; --查看所有归档,未删除的归档日志

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354