oracle的alert日志迁移

本文提供了一个Shell脚本,用于定期清理Oracle警报日志,以防止警报日志自增占用过多硬盘空间。脚本支持设置定时任务,将警报日志迁移至指定路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果oracle所在硬盘空间不是很充足,则需要定时清理alert日志,否则alert会一直自增。
SHELL脚本如下,可设置crontab一天执行一次或者一小时执行一次。会把oracle软件所在硬盘将alert日志迁移到目的路径。

#!/bin/bash
#-------------------------------------------------------------
# 将oracle产生的alert日志迁移至数据硬盘
#-------------------------------------------------------------
# @author alexander
#-------------------------------------------------------------
# @time 20160105
#-------------------------------------------------------------

# 获取alert日志路径
alert_path=$1
# 获取alert日志迁移目的路径
listener_path=$2

if [[ ! -n $1  ]] || [[ ! -n $2  ]];then
        echo "日志路劲和日志迁移目的路径未设置"
        exit    
fi

# 获取目录下所有文件函数
function ergodic(){
        local files=('null')
        local i=0
        for file in `ls $1 | grep -E "log_[0-9]*\.xml"`
                do
                        if [ -f $1"/"$file ]
                        then
                                files[$i]=$1"/"$file
                        fi
                        let i++;
                done
        # 没有alert日志文件退出脚本
        if [ $i -eq 0 ]; then
                exit
        fi
        echo ${files[@]}
}

files=`ergodic $alert_path`
for file in ${files[*]}
        do
                # 获取日志文件最后修改时间
                modify=`stat -c %Y $file`
                # 获取时间格式年-月-日
                filedate=`date -d "@${modify}" +"%Y-%m-%d"`
                # 获取时间格式年月日时分秒
                filesec=`date -d "@${modify}" +"%Y%m%d%H%M%S"`
                # 获取日志文件路径
                logpath=${file%/*}
                # 获取日志文件名
                logname=${file##*/}
                # 获取文件后缀名
                logext=${file##*.}
                # 判断日志存储路径是否存在,不存见创建之
                if [ ! -d $2"/"$filedate ]; then
                        `mkdir $2"/"$filedate`
                fi
                # 将日志文件移动到目的路径
                `mv $file $2"/"$filedate"/"$filesec"."$logext`
        done
<think>嗯,用户想迁移运行Oracle 11g的Docker容器到新服务器。首先,我得回忆一下Docker迁移的一般步骤。根据引用[2]提到的,可能需要用docker inspect查看容器参数,然后打包数据和配置。不过Oracle数据库比较特殊,数据持久化很重要,用户之前用了volumes挂载,这点要注意。 首先,检查原服务器的容器配置。用户之前的docker-compose.yml里挂载了两个目录到宿主机,分别是/data/oracle/oradata下的test_data和flash_recovery_area。所以在迁移时,这些数据目录必须完整地复制到新服务器,否则数据库数据会丢失。 然后,容器本身可能有一些运行时参数,比如端口映射是15211:1521。通过docker inspect可以获取这些信息,确保新服务器上的配置一致。不过用户已经用了docker-compose,可能直接迁移这个文件更方便。 接下来,数据迁移部分。用户之前提到用cp命令拷贝容器内目录到宿主机,但现在需要把宿主机的数据目录迁移到新服务器。可以使用rsync或者scp将/data/oracle/oradata整个传输过去。注意权限问题,Oracle在容器里可能有特定的用户权限,所以新服务器上的目录权限要设置正确。 然后是新服务器的环境准备。安装Docker和docker-compose,版本要和原服务器一致,避免兼容问题。把docker-compose.yml复制过去,调整路径如果有必要,比如确保新服务器的/data目录存在,或者修改挂载路径到其他位置。 启动容器的时候,可能需要重新构建或者直接启动。因为镜像来自阿里云的registry,新服务器需要能够拉取这个镜像,或者提前导出镜像再导入到新服务器,以防拉取失败。 另外,Oracle的配置文件或者环境变量是否需要特殊处理?比如字符集、内存参数等,可能在docker-compose.yml里有设置,需要检查。如果容器有特定的启动参数,也要在新环境里保持一致。 测试阶段很重要,启动容器后,检查日志是否有错误,进入容器内部确认数据库是否正常,用sqlplus连接测试。如果有问题,可能需要查看Oracle日志文件,比如alert log,排查原因。 最后,用户可能需要修改应用连接的数据库地址,指向新服务器的IP和端口15211。确保防火墙开放这个端口,避免连接问题。 总结步骤应该是:备份数据、迁移数据、迁移配置文件、安装Docker环境、启动容器、测试验证。需要详细说明每一步的操作命令和注意事项,尤其是数据完整性和权限问题,避免迁移后数据库无法启动。</think>### 运行Oracle 11g的Docker容器迁移步骤 #### 1. **备份容器配置与数据** - **查看容器配置** 使用`docker inspect og`查看当前容器的详细信息,包括卷映射、端口绑定等参数[^2]。 示例输出关键字段: ```bash "Mounts": [ { "Source": "/data/oracle/oradata/test_data", "Destination": "/home/oracle/app/oracle/oradata/helowin" }, ... ] "Ports": { "1521/tcp": [{"HostPort": "15211"}] } ``` - **持久化数据备份** 用户已通过卷映射将数据存储在宿主机目录`/data/oracle/oradata`下,需将此目录完整打包迁移: ```bash tar -czvf oracle_data.tar.gz /data/oracle/oradata ``` #### 2. **迁移到新服务器** - **传输数据与配置** 将`oracle_data.tar.gz`和`docker-compose.yml`复制到新服务器: ```bash scp oracle_data.tar.gz user@new_server:/target_path/ scp docker-compose.yml user@new_server:/target_path/ ``` - **解压数据并恢复目录结构** 在新服务器上解压并确保目录路径与原服务器一致: ```bash tar -xzvf oracle_data.tar.gz -C / chown -R 1000:1000 /data/oracle/oradata # 根据容器内Oracle用户UID/GID调整权限 ``` #### 3. **新服务器环境准备** - **安装Docker及依赖** 确保新服务器已安装Docker和docker-compose,版本需与原服务器一致: ```bash yum install docker docker-compose -y systemctl start docker ``` - **拉取Oracle 11g镜像** 若镜像未公开,需提前从原服务器导出镜像并导入新服务器: ```bash docker save helowin/oracle_11g > oracle11g.tar scp oracle11g.tar user@new_server:/target_path/ docker load -i oracle11g.tar ``` #### 4. **启动容器并验证** - **通过docker-compose启动** 确保新服务器的`docker-compose.yml`中卷路径和端口映射正确: ```yaml volumes: - "/data/oracle/oradata/test_data:/home/oracle/app/oracle/oradata/helowin" - "/data/oracle/oradata/flash_recovery_area:/home/oracle/app/oracle/flash_recovery_area/helowin" ports: - "15211:1521" ``` 启动容器: ```bash docker-compose up -d ``` - **验证数据库状态** 进入容器检查监听服务和数据库连接: ```bash docker exec -it og bash su - oracle lsnrctl status # 查看监听状态 sqlplus / as sysdba # 登录数据库 SELECT status FROM v$instance; # 应返回"OPEN" ``` #### 5. **故障排查** - **常见问题** - **权限错误**:检查宿主机目录权限是否与容器内Oracle用户匹配(UID/GID可通过`docker exec og id oracle`获取)。 - **端口冲突**:确保新服务器15211端口未被占用。 - **数据损坏**:从备份恢复数据,避免直接操作容器内数据库文件。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值