分类 IT运维 下的文章

一、概述

Oracle11g中引入了一个新的PL/SQL包DBMS_COMPARISON,可以比较不同数据库下或者schame下的对象/schema/数据,并且可以根据规则将不同的数据进行同步。这在进行数据的分布时将十分的有用,例如你的数据复制过程中出现问题,导致源数据和目标数据出现不一致,则可以借用该特性进行处理。如果你的系统中没有安装该过程,可以通过以下脚本手动安装:

$ORACLE_HOME/rdbms/admin/dbmscmp.sql

可以利用DBMS_COMPARISON来执行比较的对象有:

* 表
* 基于单个表的视图
* 物化视图
* 以上三种对象的同义词

- 阅读剩余部分 -

最近同事离职,原本他负责的这块业务即将下线,所以一直没有空上监控,今天突然发现监听和归档日志快把磁盘撑满了,赶紧把重要的业务都扫一遍。

不停库清理监听日志

1:首先停止监听服务进程(tnslsnr)记录日志。

lsnrctl set log_status off;

2:将监听日志文件(listener.log)复制一份,以listener.log.yyyymmdd格式命名

cp listener.log listener.log.20191209

3、将监听日志文件(listener.log)清空。清空文件的方法有很多

cat /dev/null > listener.log

或echo “” > listener.log

或cp /dev/null listener.log

4:开启监听服务进程(tnslsnr)记录日志

lsnrctl set log_status on;

对于这种listener.log增长非常迅速的系统,可以关闭监听日志lsnrctl set log_status off,不让监听写日志到文件。也可以写个job定期清理。

rq= date +"%d"

cp $ORACLE_HOME/network/log/listener.log $ORACLE_BACKUP/network/log/listener_$rq.log

su - oracle -c "lsnrctl set log_status off"

cp /dev/null $ORACLE_HOME/network/log/listener.log

su - oracle -c "lsnrctl set log_status on"

如果是RAC环境需要登录到grid用户清理listener.log和listener_scan1.log日志。

由 wukaiqiang创建, 最后修改于大约1分钟以前
MySQL实现Oracle的spool功能

Oracle中:

sqlplus> Spool C:\temp\table_names
sqlplus> select table_name from user_tables;
sqlplus> spool off;

MySQL中:

mysql> tee c:\trash\qwe.txt
mysql> show tables;
mysql> notee

C:MySQL\MySQL Server\bin>mysql -u root -p --tee=c:\trash\qwe.txt
...
mysql> notee

oracle 下spool的使用

不回显结果到屏幕

set linesize 1000
set pagesize 0
set echo off
set heading off
set feedback off
set colsep ","
set trims ON
set term off
set trimout on
spool '/home/oracle/test1_2023081601.csv'
@test1.sql
spool '/home/oracle/test2_2023081602.csv'
@test2.sql
spool off;
exit;

其中 test1.sql和test2.sql中保存sql语句

如遇乱码问题,检查环境变量.bash_profile

NLS_LANG="american_america".AL32UTF8

export NLS_LANG