Oracle日志相关操作

1.归档日志设置

# 切换账号
$ su - oracle

# 登录oracle的sys账户
$ sqlplus / as sysdba

sql> archive log list;   #查看是不是归档方式  
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     367
Next log sequence to archive   369
Current log sequence    

# 注:其中Archive Mode表示是归档方式,可以不用进行以下操作

sql> alter system set log_archive_start=true scope=spfile; #启用主动归档  
sql> shutdown immediate;  
sql> startup mount;    #打开控制文件,不打开数据文件  
sql> alter database archivelog; #将数据库切换为归档模式  
sql> alter database open;   #将数据文件打开

sql> archive log list;   #查看此时是否处于归档模式  
#查询以确定数据库位于archivelog模式中且归档过程正在运行  
sql> select log_mode from v$database;  
sql> select archiver from v$instance;  
#日志切换  
sql> alter system switch logfile;  
#在oracle情况中运行如下查询:  
sql> select name from v$archived_log;

2.设置非归档模式

sql> archive log list;   #查看是否是归档方式  
sql> alter system set log_archive_start=false scope=spfile; #禁用自动归档  
sql> shutdown immediate;  
sql> startup mount;    #打开控制文件,不打开数据文件  
sql> alter database noarchivelog; #将数据库切换为非归档模式  
sql> alter database open;   #将数据文件打开  
sql> archive log list;   #查看此时便处于非归档模式

3.阿里云设置oracle实时同步时,oracle的准备

查看数据库是否支持

# 查看数据库版本
sql> select * from v$version;
#可以看到版本是c12

sql> select version from v$instance;

# 查看数据库不是cdb类型(datawork不支持db)
sql> select name,cdb,open_mode,con_id from v$database;

创建同步账号,并赋予相应权限

# 创建oracle同步账号
sql> CREATE USER username IDENTIFIED BY password;
# 创建test账号
sql> CREATE USER test IDENTIFIED BY test123;

#给同步账户设置相应权限
grant create session to '同步账号';  //授权同步账号登录数据库。
grant connect to '同步账号';  //授权同步账号连接数据库。
grant select on nls_database_parameters to '同步账号';  //授权同步账号查询数据库的nls_database_parameters系统配置。
grant select on all_users to '同步账号';  //授权同步账号查询数据库中的所有用户。
grant select on all_objects to '同步账号';  //授权同步账号查询数据库中的所有对象。
grant select on DBA_MVIEWS to '同步账号';  //授权同步账号查看数据库的物化视图。
grant select on DBA_MVIEW_LOGS to '同步账号';  //授权同步账号查看数据库的物化视图日志。
grant select on DBA_CONSTRAINTS to '同步账号';  //授权同步账号查看数据库所有表的约束信息。
grant select on DBA_CONS_COLUMNS to '同步账号';  //授权同步账号查看数据库中所有表指定约束中所有列的相关信息。
grant select on all_tab_cols to '同步账号';  //授权同步账号查看数据库中表、视图和集群中列的相关信息。
grant select on sys.obj$ to '同步账号';  //授权同步账号查看数据库中的对象。sys.obj$表是Oracle字典表中的对象基础表,存放Oracle的所有对象。
grant select on SYS.COL$ to '同步账号';  //授权同步账号查看数据库表中列的定义信息。SYS.COL$用于保存表中列的定义信息。
grant select on sys.USER$ to '同步账号';  //授权同步账号查看数据库的系统表。sys.USER$是用户会话的默认服务。
grant select on sys.cdef$ to '同步账号';  //授权同步账号查看数据库的系统表。
grant select on sys.con$ to '同步账号';  //授权同步账号查看数据库的约束信息。sys.con$记录了Oracle的相关约束信息。
grant select on all_indexes to '同步账号';  //授权同步账号查看数据库的所有索引。
grant select on v_$database to '同步账号';  //授权同步账号查看数据库的v_$database视图。
grant select on V_$ARCHIVE_DEST to '同步账号';  //授权同步账号查看数据库的V_$ARCHIVE_DEST视图。
grant select on v_$log to '同步账号';  //授权同步账号查看数据库的v_$log视图。v_$log用于显示控制文件中的日志文件信息。
grant select on v_$logfile to '同步账号';  //授权同步账号查看数据库的v_$logfile视图。v_$logfile包含有关Redo日志文件的信息。
grant select on v_$archived_log to '同步账号';  //授权同步账号查看数据库的v$archived_log视图。v$archived_log包含有关归档日志的相关信息。
grant select on V_$LOGMNR_CONTENTS to '同步账号';  //授权同步账号查看数据库的V_$LOGMNR_CONTENTS视图。
grant select on DUAL to '同步账号';   //授权同步账号查看数据库的DUAL表。DUAL是用来构成select语法规则的虚拟表,Oracle的中DUAL中仅保留一条记录。
grant select on v_$parameter to '同步账号';  //授权同步账号查看数据库的v_$parameter视图。v$parameter是Oracle的动态字典表,保存了数据库参数的设置值。
grant select any transaction to '同步账号';  //授权同步账号查看数据库的任意事务。
grant execute on SYS.DBMS_LOGMNR to '同步账号';  //授权同步账号使用数据库的Logmnr工具。Logmnr工具可以帮助您分析事务,并找回丢失的数据。
grant alter session to '同步账号';  //授权同步账号修改数据库的连接。
grant select on dba_objects to '同步账号';  //授权同步账号查看数据库的所有对象。
grant select on v_$standby_log to '同步账号';  //授权同步账号查看数据库的v_$standby_log视图。v_$standby_log包含备用库的归档日志。
grant select on v_$ARCHIVE_GAP to '同步账号';  //授权同步账号查询缺失的归档日志。

# 赋予相应权限,以test为例
grant create session to test; 
grant connect to test;  
grant select on nls_database_parameters to test;
grant select on all_users to test;
grant select on all_objects to test; 
grant select on DBA_MVIEWS to test; 
grant select on DBA_MVIEW_LOGS to test; 
grant select on DBA_CONSTRAINTS to test;
grant select on DBA_CONS_COLUMNS to test; 
grant select on all_tab_cols to test;  
grant select on sys.obj$ to test;  
grant select on SYS.COL$ to test;  
grant select on sys.USER$ to test;
grant select on sys.cdef$ to test; 
grant select on sys.con$ to test;  
grant select on all_indexes to test; 
grant select on v_$database to test;
grant select on V_$ARCHIVE_DEST to test;
grant select on v_$log to test; 
grant select on v_$logfile to test;  
grant select on v_$archived_log to test;  
grant select on V_$LOGMNR_CONTENTS to test; 
grant select on DUAL to test;   
grant select on v_$parameter to test;  
grant select any transaction to test;  
grant execute on SYS.DBMS_LOGMNR to test; 
grant alter session to test;  
grant select on dba_objects to test;  
grant select on v_$standby_log to test; 
grant select on v_$ARCHIVE_GAP to test; 
grant LOGMINING TO test;


# 如果您涉及使用离线全量同步数据,还需要执行如下命令,授权同步账号所有表的查询权限。
sql> grant select any table to '同步账号'; 

# Oracle 12c及之后的版本需要执行如下命令,授权同步账号可以进行日志挖掘。Oracle 12c之前的版本,内置日志挖掘功能,无需执行该命令。
sql> grant LOGMINING TO '同步账号';

开启补充日志

您可以根据需要选择开启合适的补充日志,SQL语句如下。

sql> alter database add supplemental log data(primary key) columns; //为数据库的主键列开启补充日志。
sql> alter database add supplemental log data(unique) columns; //为数据库的唯一索引列开启补充日志。

切换Redo日志文件

开启补充日志后,您需要多次(一般建议执行5次)执行如下命令,切换Redo日志文件。

sql> alter system switch logfile;

查看数据库的字符编码

sql> select * from v$nls_parameters where PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');

数据集成同步数据时,仅支持UTF8、AL32UTF8、AL16UTF16及ZHS16GBK编码格式。如果数据库中包含不支持的字符编码,请进行修改后再执行数据同步。

检查数据库表的数据类型

您可以使用查看表的SQL相关语句(SELECT)查询数据库表的数据类型。示例查看'tablename'表数据类型的语句如下。

sql> select COLUMN_NAME,DATA_TYPE from all_tab_columns where TABLE_NAME='tablename'; 

或

sql> desc tablename;

核对数据类型是否被datawork支持(参考:https://help.aliyun.com/zh/dataworks/user-guide/oracle-data-source?spm=a2c4g.11186623.0.i52)

4.日志爆满问题处理及设置日志自动清理脚本

情况一:账户可以登录时

# 进入RMAN
sql> rman target /

# 查看备份参数
RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name S4ORCL are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/12c/dbs/snapcf_s4orcl.f'; # default

# 查看存储日志
RMAN> crosscheck archivelog all;

# 验证并删除过期归档日志
RMAN> delete noprompt expired archivelog all;

# 验证并删除过期归档日志,方式二
RMAN> delete noprompt archivelog all completed before '时间';
# 其中,时间需要根据情况设置,表示删除早于该时间的归档日志,比如'SYSDATE - 3',表示保留近3天的日志

设置自动清理日志脚本

rman target / nocatalog << EOF
run {
allocate channel d1 type disk;
delete noprompt archivelog all completed before 'SYSDATE - 3';
release channel d1;
}
exit;
EOF

其中,'SYSDATE - 3'表示保留近三天的日志,按需设置

归档日志的备份和恢复

# 备份归档日志
RMAN> backup archivelog all;

# 在进行数据库恢复时,可能需要使用备份的归档日志进行恢复。
RMAN> restore archivelog all;

# 恢复完归档日志后,需要将恢复的归档日志应用到数据库中,可以在SQL*Plus命令行界面输入以下命令进行恢复:
sql> recover database;

情况二:存储占满导致无法登录账户时

先删除一部分日志文件后,使得账户能够登录oracle,再进行情况一的操作删除多余日志

# 使用root用户
# 查看存储情况
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.8G     0  3.8G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  1.1M  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda1        69G   38G   28G  58% /
tmpfs           781M     0  781M   0% /run/user/0

# 其中/dev/vda1中的Used表示当前日志存储空间剩余容量

# 按天删除
# 查看某天日志数量
$ ls /u01/app/oracle/admin/s4orcl/adump |grep 20230701 |wc -l
# 删除某天日志
$ rm -rf /u01/app/oracle/admin/s4orcl/adump/*20230701*

# 按月删除
# 查看某月日志数量
$ ls /u01/app/oracle/admin/s4orcl/adump |grep 202307 |wc -l
# 删除某月10天日志
$ rm -rf /u01/app/oracle/admin/s4orcl/adump/*2023070*
$ rm -rf /u01/app/oracle/admin/s4orcl/adump/*2023071*
$ rm -rf /u01/app/oracle/admin/s4orcl/adump/*2023072*
$ rm -rf /u01/app/oracle/admin/s4orcl/adump/*2023073*
# 删除某月日志
$ rm -rf /u01/app/oracle/admin/s4orcl/adump/*202307*
相关推荐
小码的头发丝、33 分钟前
Django中ListView 和 DetailView类的区别
数据库·python·django
Karoku06643 分钟前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
周全全1 小时前
MySQL报错解决:The user specified as a definer (‘root‘@‘%‘) does not exist
android·数据库·mysql
白云如幻1 小时前
MySQL的分组函数
数据库·mysql
荒川之神2 小时前
ORACLE 闪回技术简介
数据库·oracle
时差9533 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式3 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
Mephisto.java3 小时前
【大数据学习 | kafka高级部分】kafka的优化参数整理
大数据·sql·oracle·kafka·json·database
秋意钟4 小时前
MySQL日期类型选择建议
数据库·mysql
Dxy12393102164 小时前
python下载pdf
数据库·python·pdf