使用ansible 自动化安装oracle 19c 单节点数据库基于rhel 7.9

使用ansible 自动化安装oracle 19c 数据库基于rhel 7.9

1、找一台机器,其上已经安装完docker 并启动docker服务,这里控制节点ip:192.168.11.100
2、计划在1台已安装好rhel7.9的操作系统上安装oracle19c
ip 分别为192.168.11.151
3、在控制节点上运行如下脚本,修改v_host1,有多台可以继续依次添加,这里host1为主机名,配置好后会自动根据该名称为目标主机配置该主机名; 修改v_hostsum 为总共需要安装oracle数据库的节点数
#vi install_oracle19c.sh

#!/bin/bash
#vars 
v_host1='ora19c1 ansible_ssh_host=192.168.11.151 ansible_ssh_user=root ansible_ssh_pass="123456"'
#v_host2='host2 ansible_ssh_host=192.168.11.152 ansible_ssh_user=root ansible_ssh_pass="123456"'
v_hostsum=1
#defaults vars
v_image_path="registry.cn-shenzhen.aliyuncs.com/shine_fei/centos8/ansible"
v_image_version="2.9.1"
#get and run a ansible docker image  
v_1=`docker images  |grep $v_image_path |grep $v_image_version |wc -l`
if [[ $v_1 -eq 0 ]]; then
	docker pull $v_image_path:$v_image_version
fi
v_ipforward=`sysctl net.ipv4.ip_forward | awk '{print $3}'`
if [[ $v_ipforward -eq 0 ]];then
	sysctl -w net.ipv4.ip_forward=1
fi
v_2=`docker ps |grep $v_image_path |grep $v_image_version |wc -l`
if [[ $v_2 -eq 0 ]]; then
	if [ ! -d "/opt/ansible" ]; then
		mkdir /opt/ansible
	fi
        docker run -d --volume=/opt/ansible:/opt/ansible:ro $v_image_path:$v_image_version
fi  
if [ ! -f /opt/ansible/hosts.j2 ]; then
	echo "###download hosts.j2 file to /opt/ansible"
	curl -o /opt/ansible/hosts.j2  http://feilunshuai.tpddns.cn:8446/repos/databases/scripts/hosts.j2
fi
if [ ! -f /opt/ansible/vars_19c.yaml ]; then
        echo "###download vars_19c.yaml file to /opt/ansible"
        curl -o /opt/ansible/vars_19c.yaml  http://feilunshuai.tpddns.cn:8446/repos/databases/scripts/vars_19c.yaml
fi
if [ ! -f /opt/ansible/install_oracle19c_single_instance_fs.yml ]; then
        echo "###download install_oracle19c_single_instance_fs.yml file to /opt/ansible"
        curl -o /opt/ansible/install_oracle19c_single_instance_fs.yml  http://feilunshuai.tpddns.cn:8446/repos/databases/scripts/install_oracle19c_single_instance_fs.yml
fi


#generate ansible inventory
v_3="/opt/ansible"
echo "###generate ansible inventory"
cat /dev/null >  $v_3/inventory
for i in $(seq 1 $v_hostsum)
do 
	echo "[host$i]" >> $v_3/inventory
	eval echo '$'v_host$i >> $v_3/inventory
#check number of ORACLE_SID for hosts
	v_hostname=`eval echo '$'v_host$i |awk '{print $1}'`
	echo "###check ORACLE_SID_$v_hostname variables exists in vars_19c.yaml"
	v_countoraclesid=`cat $v_3/vars_19c.yaml |grep -v '^#'|grep ORACLE_SID_$v_hostname |wc -l`
	if [[ $v_countoraclesid -eq 0 ]]; then
		echo "error: The ORACLE_SID_$v_hostname dose not exist"
		echo "error: Please modify $v_3/vars_19c.yaml, add ORACLE_SID_$v_hostname variables"
		exit
	else
		echo "###check successful"
	fi
	
done
v_containerid=`docker ps |grep $v_image_path |grep $v_image_version |awk '{print $1}'`
echo "***************************************************"
echo "1. If you want to self-defining some parameter, please input n/N. Then modify /opt/ansible/vars_19c.yaml parameter for you. Then use command as below to execute."
echo "docker exec -it $v_containerid /bin/bash"
echo "cd /opt/ansible ; ansible-playbook -i inventory install_oracle19c_single_instance_fs.yml"
echo ""
echo "2. If you just use default config, please input y/Y."
echo "***************************************************"

read -r -p "Are You Want To Continue? [Y/n] " input

case $input in
    [yY][eE][sS]|[yY])
		echo "Yes"
		docker exec $v_containerid ansible-playbook -i $v_3/inventory $v_3/install_oracle19c_single_instance_fs.yml 
		;;

    [nN][oO]|[nN])
		echo "No"
                exit 1
       	        ;;

    *)
		echo "Invalid input..."
		exit 1
		;;
esac


4、然后执行脚本
#chmod +x install_oracle19c.sh
#./install_oracle19c.sh 根据提示,如果使用默认配置,直接选y,继续,如果需要自定义相关参数,选n,然后根据1. 后面的提示命令继续执行,这里我使用默认配置继续执行,结果如下

[root@docker oracle]# ./install_oracle19c.sh  
###download hosts.j2 file to /opt/ansible
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   337  100   337    0     0   1534      0 --:--:-- --:--:-- --:--:--  1538
###download vars_19c.yaml file to /opt/ansible
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1283  100  1283    0     0   6239      0 --:--:-- --:--:-- --:--:--  6258
###download install_oracle19c_single_instance_fs.yml file to /opt/ansible
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 13357  100 13357    0     0  84671      0 --:--:-- --:--:-- --:--:-- 85076
###generate ansible inventory
###check ORACLE_SID_ora19c1 variables exists in vars_19c.yaml
###check successful
***************************************************
1. If you want to self-defining some parameter, please input n/N. Then modify /opt/ansible/vars_19c.yaml parameter for you. Then use command as below to execute.
docker exec -it 87429c83533a /bin/bash
cd /opt/ansible ; ansible-playbook -i inventory install_oracle19c_single_instance_fs.yml

2. If you just use default config, please input y/Y.
***************************************************
Are You Want To Continue? [Y/n] Y
Yes

PLAY [configure oracle environment and download software] **********************

TASK [Gathering Facts] *********************************************************
......
......

如果中途报错,可以修复后,继续按提示1.下的命令继续执行,示例如下

docker exec -it 87429c83533a /bin/bash
cd /opt/ansible ; ansible-playbook -i inventory install_oracle19c_single_instance_fs.yml

5、执行成功后最终结果类似如下

           TASK [oracle installation results] *******************************************************************************************************************************************
ok: [ora19c1] => {
    "command_result": {
        "changed": true,
        "cmd": "source /home/grid/.bash_profile; /u01/app/19.3.0/grid/bin/lsnrctl start",
        "delta": "0:00:00.150822",
        "end": "2022-08-18 17:41:35.927980",
        "failed": true,
        "msg": "non-zero return code",
        "rc": 1,
        "start": "2022-08-18 17:41:35.777158",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "\nLSNRCTL for Linux: Version 19.0.0.0.0 - Production on 18-AUG-2022 17:41:35\n\nCopyright (c) 1991, 2019, Oracle.  All rights reserved.\n\nTNS-01106: Listener using listener name LISTENER has already been started",
        "stdout_lines": [
            "",
            "LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 18-AUG-2022 17:41:35",
            "",
            "Copyright (c) 1991, 2019, Oracle.  All rights reserved.",
            "",
            "TNS-01106: Listener using listener name LISTENER has already been started"
        ]
    }
}

PLAY RECAP *******************************************************************************************************************************************************************
ora19c1                    : ok=57    changed=40    unreachable=0    failed=0    skipped=1    rescued=0    ignored=1   

6、/opt/ansible/vars_19c.yaml参数解释

---
groups_lists: ["oinstall","dba","oper","asmadmin","asmoper","asmdba"]    ---需要创建的用户组
pw_os_oracle: oracle    ---新建oracle用户的密码
pw_os_grid: oracle		---新建grid用户的密码
#software_url1 oracle software --oracle 软件下载地址
software_url1: "http://feilunshuai.tpddns.net:8446/repos/databases/oracle19c/LINUX.X64_193000_db_home.zip"
#software_url2 grid software  --grid软件下载地址
software_url2: "http://feilunshuai.tpddns.net:8446/repos/databases/oracle19c/LINUX.X64_193000_grid_home.zip"
yum_repos: "http://feilunshuai.tpddns.net:8446/repos/rhel-7-server-rpms/"   ---yum仓库地址
url_checksum: "sha256:http://feilunshuai.tpddns.net:8446/repos/databases/oracle19c/checksum.txt"  ---软件包sha256校验,校验不通过,就重新下载
gridrsp_url: "http://feilunshuai.tpddns.net:8446/repos/databases/oracle19c/grid.rsp"   ---grid 软件安装的response模板
oracle_softonlyrsp_url: "http://feilunshuai.tpddns.net:8446/repos/databases/oracle19c/oracle_soft.rsp"    ---oracle软件安装的response模板					
ORACLE_INSTALL: "/u01/app"    		---所有软件安装的基础目录
ORACLE_BASE: "/u01/app/oracle"		
ORACLE_HOME: "/u01/app/oracle/product/11.2.0/dbhome_1"  
ORACLE_SID_ora19c1: "orcldb1"     	---的实例名称,这里的ora19c1为主机名,必须与实际主机名一致,脚本会检查该变量是否合规
ORACLE_SID_host2: "orcldb2"		 	---host2的实例名称,这里的host2为主机名,必须与实际主机名一致,脚本会检查该变量是否合规
GRID_BASE: "/u01/app/grid"
GRID_HOME: "/u01/app/11.2.0/grid"
INVENTORY_LOCATION: "/u01/app/oraInventory"
firewalld_allow_ips: ["192.168.11.151","192.168.11.152"]  ---根据需要配置主机需要放通哪些ip访问主机
#database
sysPassword: "oracle123"    		---sys用户密码
systemPassword: "oracle123"			---system用户密码
redoLogFileSize: 50					---redo日志大小,单位Mb
storageType: "FS"     				---目前只支持FS类型
characterSet: "AL32UTF8"			---数据库字符集
nationalCharacterSet: "AL16UTF16"	---国家字符集
listeners: "LISTENER"				---侦听
totalMemory: "1000"					---sga占80%,pga占20%,单位Mb
databaseType: "OLTP"				---数据库类型

7、清理
如果不需要或重新安装,可以先清理一下

rm -rf /u01/app/
rm -rf /etc/oratab

8、其他参考

docker exec -it 87429c83533a /bin/bash
cd /opt/ansible ;

如果gird 软件已经安装,可以跳过grid 软件安装
ansible-playbook  -i inventory  --skip-tags "grid" install_oracle19c_single_instance_fs.yml
如果oracle 软件已经安装,可以跳过grid和oracle 软件安装
ansible-playbook  -i inventory  --skip-tags "grid,oracle" install_oracle19c_single_instance_fs.yml

9、资源下载(根据需要)

如果无法从远端下载文件,可以从百度网盘中下载文件
链接:https://pan.baidu.com/s/1qEEk8RN4z9sBsbl93wN_Xw?pwd=6666 
提取码:6666 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值