DBA使用Shell完成自动化相关工作
迪丽瓦拉
2025-05-28 23:16:59
0
  1. 数据库备份和恢复: Shell脚本可以自动化数据库备份和恢复的过程,以及在备份和恢复过程中需要执行的其他操作,例如将备份文件传输到远程服务器等。

数据库进行备份的脚本: 

以下是一个示例 Oracle 19c 数据库备份脚本,该脚本将备份数据库并将备份文件传输到远程服务器。您可以使用 cron 作业调度器定期运行此脚本。

#!/bin/bash# set backup and log file paths
BACKUP_DIR=/opt/oracle/backup
LOG_FILE=/opt/oracle/backup.log# set remote server details
REMOTE_HOST=remote-server.example.com
REMOTE_USER=username
REMOTE_DIR=/backup# run backup using RMAN
rman target / << EOF >> $LOG_FILE
run {
allocate channel ch1 type disk;
backup as compressed backupset database plus archivelog delete input;
release channel ch1;
}
EOF# check if backup was successful
if [ $? -eq 0 ]; thenecho "Backup completed successfully on $(date)." >> $LOG_FILE# transfer backup file to remote serverscp $BACKUP_DIR/*.bkp $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR# check if transfer was successfulif [ $? -eq 0 ]; thenecho "Backup file transfer to remote server completed successfully on $(date)." >> $LOG_FILEelseecho "Error: Backup file transfer to remote server failed on $(date)." >> $LOG_FILEfi
elseecho "Error: Backup failed on $(date)." >> $LOG_FILE
fi

请注意,此脚本使用了相同的备份命令和传输命令作为之前示例中的脚本,但是在此示例中,它被封装在一个 shell 脚本中以便自动化。根据需要修改脚本来适应您自己的环境和需求。

接下来,您需要配置计划任务来定期运行此脚本。为了每天晚上11点运行备份脚本,请使用以下命令来编辑当前用户的 crontab 文件:

crontab -e

 然后添加以下行:

0 23 * * * /path/to/backup/script.sh

这将导致脚本每天晚上11点运行一次,并在完成备份和传输之后将输出写入日志文件中。

数据库进行恢复的脚本:

以下是一个示例 Oracle 19c 数据库恢复脚本,该脚本将使用 RMAN 工具来恢复数据库。在运行此脚本之前,请确保您已经创建了备份并知道要恢复的时间点。

 

#!/bin/bash# set log file path
LOG_FILE=/opt/oracle/recovery.log# specify recovery target time
RECOVERY_TIME="TO_DATE('2022-03-15 10:00:00', 'YYYY-MM-DD HH24:MI:SS')"# run recovery using RMAN
rman target / << EOF >> $LOG_FILE
run {
set until time $RECOVERY_TIME;
restore database;
recover database;
}
EOF# check if recovery was successful
if [ $? -eq 0 ]; thenecho "Recovery completed successfully on $(date)." >> $LOG_FILE
elseecho "Error: Recovery failed on $(date)." >> $LOG_FILE
fi

 请注意,在此示例中,我们通过设置 RECOVERY_TIME 变量来指定需要恢复到的时间点。这个变量应该设置为正确的时间点,以确保只恢复到所需的时间点。

此脚本还将输出写入日志文件中,以便您可以随时检查恢复操作的结果和状态。根据需要修改脚本来适应您自己的环境和需求。

2.数据库监控和维护: Shell脚本可以通过定期运行SQL脚本和检查日志文件等方式来监控数据库的性能和健康状况,并在发现异常情况时执行相关维护操作,例如重新启动数据库实例、清理临时文件等。

以下是一个示例监控脚本,它将定期运行 SQL 脚本并检查日志文件以监视数据库性能和健康状况。如果发现异常情况,脚本将执行相关维护操作,例如重新启动数据库实例、清理临时文件等。

#!/bin/bash# set log file path
LOG_FILE=/opt/oracle/monitor.log# run SQL script
sqlplus -s /nolog << EOF >> $LOG_FILE
connect username/password@database_name;@/path/to/sql/script.sql;
EOF# check log file for errors or warnings
if grep -q "ORA-" $LOG_FILE; thenecho "Warning: SQL script generated errors or warnings on $(date)." >> $LOG_FILE
fi# check alert log file for errors or warnings
ALERT_LOG=/opt/oracle/diag/rdbms/database_name/trace/alert_database_name.logif grep -q "ORA-" $ALERT_LOG; thenecho "Warning: Alert log file contains errors or warnings on $(date)." >> $LOG_FILE
fi# perform maintenance if necessary
if [ -n "$(grep 'ORA-00020' $ALERT_LOG)" ]; thenecho "Database instance is hung. Restarting database..." >> $LOG_FILEsystemctl restart oracle
fiif [ -n "$(find /opt/oracle/admin/tmp -type f -mtime +7)" ]; thenecho "Cleaning up temporary files..." >> $LOG_FILErm /opt/oracle/admin/tmp/*
fi

 请注意,在此示例中,我们使用了相同的方法来运行 SQL 脚本并检查日志文件。如果发现异常情况,脚本将执行相关的维护操作。例如,如果发现数据库实例挂起,脚本将重启数据库实例;如果发现临时文件夹中的文件超过 7 天未使用,脚本将删除它们。

 根据需要修改脚本来适应您自己的环境和需求。要定期运行此脚本,请使用以下命令来编辑当前用户的 crontab 文件:

crontab -e

然后添加以下行:

0 0 * * * /path/to/monitor/script.sh

这将导致脚本每天午夜12点运行一次,并在完成运行之后将输出写入日志文件中。

 

3.系统管理和自动化运维: Shell脚本可以编写系统管理工具并进行自动化运维,例如检查磁盘空间、删除过期的日志文件、执行定期维护任务等。

以下是一个示例系统管理工具脚本,它将检查磁盘空间、删除过期的日志文件,执行定期维护任务等。您可以使用此脚本来自动化运维操作,并根据需要进行修改以满足特定需求。

 

#!/bin/bash# check disk space usage
DISK_THRESHOLD=90  # set the threshold in %
DISK_USAGE=$(df -h / | awk '{print $5}' | tail -n1 | tr -d '%')
if [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ]; thenecho "Warning: Disk space usage is above ${DISK_THRESHOLD}%" >&2
fi# delete old log files
LOG_DIR=/var/log/your-app
DAYS_TO_KEEP=7
find "$LOG_DIR" -type f -mtime +"$DAYS_TO_KEEP" -delete# run regular maintenance tasks
# ...echo "$(date) - System management tasks completed." >> /var/log/sysadmin.log

在上述示例中:

  • 我们使用 df 命令来获取磁盘空间使用情况,并将其与预设的阈值比较。
  • 使用 find 命令来删除指定目录中早于指定天数的文件。
  • 在完成所有任务后,我们将消息写入系统日志文件。

要使用此脚本进行自动化运维操作,请将其命名为 sysadmin-tool.sh 或类似的名称,并将其放置在适当的位置(例如 /usr/local/bin)。然后,您可以将此脚本添加到计划任务中,以便定期运行。

 要编辑当前用户的 crontab 文件,请使用以下命令:

crontab -e

然后,添加以下行以每小时运行一次:

0 * * * * /usr/local/bin/sysadmin-tool.sh

根据需要修改脚本来适应您自己的环境和需求,例如更改目标目录、更改保存日志文件的位置、增加其他维护任务等。

4.安装和部署: Shell脚本可以自动化安装和部署Oracle数据库和相关应用程序,例如通过命令行界面或安装向导安装Oracle软件、创建数据库实例、分配权限等。

以下是一个示例 Oracle 数据库自动化安装和部署脚本,该脚本可以通过命令行界面或安装向导来安装 Oracle 软件、创建数据库实例并分配权限。

#!/bin/bash# set variables for installation
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
DB_NAME=mydb
DB_SID=mydb
DB_PORT=1521
INSTALL_FILE="LINUX.X64_193000_db_home.zip"
INSTALL_DIR="/tmp/install"# create installation directory if it doesn't exist
mkdir -p "$INSTALL_DIR"# download the Oracle software installation file
echo "Downloading Oracle software installation file..."
cd "$INSTALL_DIR" || exit
wget https://download.oracle.com/otn/linux/oracle19c/"$INSTALL_FILE"# extract and install Oracle software
unzip -q "$INSTALL_FILE"
cd "database" || exit
./runInstaller \-silent \-responseFile "$INSTALL_DIR/response/db_install.rsp" \-ignoreSysPrereqs \-waitForCompletion \-showProgress# create a new database
echo "Creating Oracle database instance..."
dbca -silent \-createDatabase \-templateName General_Purpose.dbc \-gdbname "$DB_NAME" \-sid "$DB_SID" \-sysPassword oracle \-systemPassword oracle \-emConfiguration NONE \-datafileDestination /u01/app/oracle/oradata \-characterSet AL32UTF8 \-totalMemory 2048 \-memoryPercentage 25 \-redoLogFileSize 50 \-sampleSchema true \-enableArchive true# set environment variables
echo "Setting environment variables for Oracle software..."
echo "export ORACLE_HOME=$ORACLE_HOME" >> /etc/profile.d/oracle.sh
echo "export ORACLE_BASE=$ORACLE_BASE" >> /etc/profile.d/oracle.sh
echo "export PATH=$PATH:$ORACLE_HOME/bin" >> /etc/profile.d/oracle.sh
source /etc/profile.d/oracle.sh# configure listener and TNS names
echo "Configuring listener and TNS names..."
lsnrctl start
echo "LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = $DB_PORT))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = $DB_NAME)(SID_NAME = $DB_SID)(ORACLE_HOME = $ORACLE_HOME)))" > "$ORACLE_HOME/network/admin/listener.ora"echo "
$DB_SID =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = $DB_PORT))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = $DB_SID)))" > "$ORACLE_HOME/network/admin/tnsnames.ora"# grant required privileges
echo "Granting permissions to Oracle users..."
sqlplus -s / as sysdba <

在上述示例中:

  • 我们设置了变量以指定 Oracle 安装的位置、数据库名称、SID、端口等。
  • 下载并解压 Oracle 安装文件,并使用 runInstaller 命令进行安装。
  • 使用 dbca 命令创建新的数据库实例。
  • 设置环境变量以便让系统找到 Oracle 软件。
  • 配置监听器和 TNS 名称,使其能够连接到数据库实例。
  • 最后,使用 sqlplus 命令授予必要的权限。

根据需要修改脚本来适应您自己的环境和需求。例如,更改变量以适应您的安装路径和参数,添加其他自定义配置等。

请注意,在运行此脚本之前,您需要先为当前用户授权以执行所有必要操作,例如安装软件、创建数据库等。例如,使用以下命令将当前用户添加到 dba 组中:

sudo usermod -aG dba "$(whoami)"

 然后,您可以运行此脚本进行自动化 Oracle 数据库安装和部署。注意,在运行脚本前,请务必备份系统和数据。

如果您需要通过交互式方式安装 Oracle 软件和创建新的数据库实例,则可以基于上述脚本编写一个包含提示语句的脚本。例如:

#!/bin/bash# prompt for installation details
read -p "Enter the Oracle home directory name (default: /u01/app/oracle/product/19.0.0/dbhome_1): " ORACLE_HOME
ORACLE_HOME=${ORACLE_HOME:-/u01/app/oracle/product/19.0.0/dbhome_1}read -p "Enter the Oracle base directory name (default: /u01/app/oracle): " ORACLE_BASE
ORACLE_BASE=${ORACLE_BASE:-/u01/app/oracle}read -p "Enter the database name (default: mydb): " DB_NAME
DB_NAME=${DB_NAME:-mydb}read -p "Enter the database SID (default: mydb): " DB_SID
DB_SID=${DB_SID:-mydb}read -p "Enter the database port number (default: 1521): " DB_PORT
DB_PORT=${DB_PORT:-1521}# download and extract the Oracle software installation file
echo "Downloading Oracle software installation file..."
cd "/tmp" || exit
read -p "Enter the Oracle software installation file URL: " SOFTWARE_URL
wget "$SOFTWARE_URL"
INSTALL_FILE=$(ls LINUX.X64_*.zip)
unzip -q "$INSTALL_FILE"# install Oracle software
echo "Installing Oracle software..."
cd "database" || exit
./runInstaller# create a new database
echo "Creating Oracle database instance..."
dbca# set environment variables
echo "Setting environment variables for Oracle software..."
echo "export ORACLE_HOME=$ORACLE_HOME" >> /etc/profile.d/oracle.sh
echo "export ORACLE_BASE=$ORACLE_BASE" >> /etc/profile.d/oracle.sh
echo "export PATH=$PATH:$ORACLE_HOME/bin" >> /etc/profile.d/oracle.sh
source /etc/profile.d/oracle.sh# configure listener and TNS names
echo "Configuring listener and TNS names..."
lsnrctl start
echo "LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = $DB_PORT))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = $DB_NAME)(SID_NAME = $DB_SID)(ORACLE_HOME = $ORACLE_HOME)))" > "$ORACLE_HOME/network/admin/listener.ora"echo "
$DB_SID =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = $DB_PORT))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = $DB_SID)))" > "$ORACLE_HOME/network/admin/tnsnames.ora"# grant required privileges
echo "Granting permissions to Oracle users..."
sqlplus -s / as sysdba <

在此示例中,我们添加了几个提示语句来引导用户输入所需的安装信息(例如 Oracle Home 目录、数据库名称等)。用户可以根据自己的需求更改这些信息。然后,脚本将下载并解压 Oracle 安装文件,并使用交互式方式安装 Oracle 软件和创建新的数据库实例。

请注意,在运行此脚本之前,您需要先为当前用户授权以执行所有必要操作,例如安装软件、创建数据库等。另外,此脚本需要用户手动输入一些信息,因此不能完全自动化。

5.其他任务: Shell脚本还可以用于执行其他与Oracle数据库相关的任务,例如数据迁移、用户管理、权限分配等。

以下是一个示例 Oracle 数据库管理脚本,它可以执行数据迁移、用户管理和权限分配等任务。

#!/bin/bash# set variables for data migration
SOURCE_DB=mydb1
SOURCE_SCHEMA=schema1
TARGET_DB=mydb2
TARGET_SCHEMA=schema2
TABLES=(table1 table2 table3)# migrate data from source database to target database
echo "Migrating data from $SOURCE_SCHEMA in $SOURCE_DB to $TARGET_SCHEMA in $TARGET_DB..."
for table in "${TABLES[@]}"; doexpdp "'/ as sysdba'" \directory=DATA_PUMP_DIR \schemas=$SOURCE_SCHEMA \tables=$table \dumpfile=$table.dmp \logfile=$table.logimpdp "'/ as sysdba'" \directory=DATA_PUMP_DIR \remap_schema=$SOURCE_SCHEMA:$TARGET_SCHEMA \dumpfile=$table.dmp \logfile=$table_imp.log \exclude=INDEX,CONSTRAINT
done# create a new user and grant privileges
NEW_USER=new_user
NEW_PASSWORD=password123
echo "Creating new user $NEW_USER..."
sqlplus -s / as sysdba <

在上述示例中:

  • 我们使用 expdpimpdp 命令从源数据库中导出表的数据,并将其导入到目标数据库中。
  • 我们创建了一个新的用户并为其授予连接和 DBA 权限,然后将 SELECT、INSERT、UPDATE 和 DELETE 权限授予现有用户。

根据需要修改脚本来适应您自己的环境和需求。例如,更改变量以适应您的数据库名称、用户名、密码等,修改数据迁移的表列表,添加其他用户管理和权限分配任务等。

请注意,在运行此脚本之前,请务必备份系统和数据。同时确保当前用户具有足够的权限来执行所有必要操作。

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...