-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoracle_install.sh
More file actions
373 lines (362 loc) · 13.7 KB
/
Copy pathoracle_install.sh
File metadata and controls
373 lines (362 loc) · 13.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
#!/bin/bash
#Author: Musker.Chao
#oracle 12c
#local host ip
#address: https://github.com/spdir/oracle-single-install
HostIP=""
#oracle user password
OracleUserPasswd="123456"
#default `systemOracle.com`
ORACLE_DB_PASSWD="123456"
#SID/SERVERNAME,default `oriedb`
SID="orcl"
# Install single instance choose charset
# 1-AL32UTF8(default), 2-ZHS16GBK
# Currently only supports single instance, does not support pdb
SINGLE_CHARSET='2'
# Install instance
#0-no,1-singleInstance,2-cdb
IS_INSTANCE='1'
# Choose configure file path
# 0-remote(default) 1-local
Get_Config_Method="0"
#---------------------------------------------------------------------------------#
#Global environment variable
if [[ ${SID} == "" ]];then
SID="oriedb"
fi
root_path=`pwd`
response='/home/oracle/response'
MemTotle=$(grep -r 'MemTotal' /proc/meminfo | awk -F ' ' '{print int($2/1024/1024+1)}')
ORACLE_HOME='/data/app/oracle/product/12.1.0/db_1'
con_name="
sqlplus / as sysdba<< EOF
show con_name;
exit;
EOF
"
web_plugin="
sqlplus / as sysdba<< EOF
exec dbms_xdb_config.sethttpport(1522);
exit;
EOF
"
cdb_sql="
sqlplus / as sysdba<< EOF
shutdown abort;
create spfile from pfile='"$ORACLE_HOME/dbs/initcdb.ora"';
startup nomount;
CREATE DATABASE ${SID}
USER SYS IDENTIFIED BY pass
USER SYSTEM IDENTIFIED BY pass
LOGFILE GROUP 1 ('"/data/app/oracle/oradata/${SID}/redo01a.log"','"/data/app/oracle/oradata/${SID}/redo01b.log"')
SIZE 100M BLOCKSIZE 512,
GROUP 2 ('"/data/app/oracle/oradata/${SID}/redo02a.log"','"/data/app/oracle/oradata/${SID}/redo02b.log"')
SIZE 100M BLOCKSIZE 512
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1024
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '"/data/app/oracle/oradata/${SID}/system01.dbf"' SIZE 700M
SYSAUX DATAFILE '"/data/app/oracle/oradata/${SID}/sysaux01.dbf"' SIZE 550M
DEFAULT TABLESPACE deftbs
DATAFILE '"/data/app/oracle/oradata/${SID}/deftbs01.dbf"' SIZE 500M
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '"/data/app/oracle/oradata/${SID}/temp01.dbf"' SIZE 20M
UNDO TABLESPACE undotbs1
DATAFILE '"/data/app/oracle/oradata/${SID}/undotbs01.dbf"' SIZE 200M
ENABLE PLUGGABLE DATABASE
SEED
FILE_NAME_CONVERT = ('"/data/app/oracle/oradata/${SID}/"',
'/data/app/oracle/oradata/pdbseed/')
SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
SYSAUX DATAFILES SIZE 100M
USER_DATA TABLESPACE usertbs
DATAFILE '/data/app/oracle/oradata/pdbseed/usertbs01.dbf' SIZE 200M;
exit
EOF
"
#Judgment parameter
function j_para() {
#判断必要参数是否存在
if [[ ${HostIP} == '' ]];then
echo -e "\033[34mInstallNotice >>\033[0m \033[31mPlease config HostIP\033[0m"
exit
fi
#判断数据库包文件是否存在
if [ ! -f "/tmp/linuxamd64_12102_database_1of2.zip" ]; then
echo -e "\033[34mInstallNotice >>\033[0m \033[31mlinuxamd64_12102_database_1of2.zip not found\033[0m"
exit
fi
if [ ! -f "/tmp/linuxamd64_12102_database_2of2.zip" ]; then
echo -e "\033[34mInstallNotice >>\033[0m \033[31mlinuxamd64_12102_database_2of2.zip not found\033[0m"
exit
fi
if [[ ${Get_Config_Method} == "1" ]]; then
if [[ ${IS_INSTANCE} == '1' ]]; then
if [[ ! -f ${root_path}/conf/db_install.rsp || ! -f ${root_path}/conf/dbca_single.rsp ]]; then
echo -e "\033[34mInstallNotice >>\033[0m \033[31m ./conf/db_install.rsp or ./conf/dbca_single.rsp file not found\033[0m"
exit
fi
elif [[ ${IS_INSTANCE} == '2' ]]; then
if [[ ! -f ${root_path}/conf/initcdb.ora ]]; then
echo -e "\033[34mInstallNotice >>\033[0m \033[31m ./conf/initcdb.ora file not found\033[0m"
exit
fi
else
if [[ ! -f ${root_path}/conf/db_install.rsp ]]; then
echo -e "\033[34mInstallNotice >>\033[0m \033[31m ./conf/db_install.rsp file not found\033[0m"
exit
fi
fi
fi
}
#install package
function install_package() {
yum install -y binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33.i686 glibc glibc.i686 \
glibc-devel glibc-devel.i686 ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libX11 libX11.i686 \
libXau libXau.i686 libXi libXi.i686 libXtst libXtst.i686 libgcc libgcc.i686 libstdc++ libstdc++.i686 \
libstdc++-devel libstdc++-devel.i686 libxcb libxcb.i686 make nfs-utils net-tools smartmontools sysstat \
unixODBC unixODBC-devel gcc gcc-c++ libXext libXext.i686 zlib-devel zlib-devel.i686 unzip wget vim epel-release
}
#base_config
function base_config() {
echo "${HostIP} DB" >> /etc/hosts
#close selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
#close firewalld
systemctl stop firewalld && systemctl disable firewalld
#add user and group
groupadd oinstall && groupadd dba && groupadd oper && useradd -g oinstall -G dba,oper oracle \
&& echo "$OracleUserPasswd" | passwd oracle --stdin
#mkdir oracle need directory
orcl_home='/data/app'
mkdir -p ${orcl_home}/oracle/product/12.1.0/db_1 && chmod -R 775 ${orcl_home}/oracle \
&& chown -R oracle:oinstall ${orcl_home}
#modify some file
echo 'fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
' >> /etc/sysctl.conf && sysctl -p
echo 'oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728
' >> /etc/security/limits.d/20-nproc.conf
echo 'session required /lib64/security/pam_limits.so
session required pam_limits.so
' >> /etc/pam.d/login
echo 'if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
' >> /etc/profile
#add oracle environmental variable
echo '# Oracle Settings
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=DB
export ORACLE_UNQNAME=oriedb
export ORACLE_BASE=/data/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.1.0/db_1
export ORACLE_SID=oriedb
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
' > /tmp/oracleInstallTmp.txt
if [[ ${SID} != 'oriedb' ]];then
sed -i "s/oriedb/${SID}/g" /tmp/oracleInstallTmp.txt
fi
cat /tmp/oracleInstallTmp.txt >> /home/oracle/.bash_profile && bash /home/oracle/.bash_profile
rm -rf /tmp/oracleInstallTmp.txt
}
#option oracle file
function oracle_file() {
#Decompression package
unzip /tmp/linuxamd64_12102_database_1of2.zip -d /tmp/
unzip /tmp/linuxamd64_12102_database_2of2.zip -d /tmp/
chown -R oracle:oinstall /tmp/database
#get install config file
mkdir ${response} && cd ${response}
# get config method
if [[ ${Get_Config_Method} == "1" ]]; then
cp ${root_path}/conf/db_install.rsp .
cp ${root_path}/conf/dbca_single.rsp .
else
wget https://raw.githubusercontent.com/yongxinzhang18810492456/xuexi/master/conf/db_install.rsp
wget https://raw.githubusercontent.com/yongxinzhang18810492456/xuexi/master/conf/dbca_single.rsp
fi
#modify config file
if [[ ${ORACLE_DB_PASSWD} != "" ]];then
sed -i "s/systemOracle.com/${ORACLE_DB_PASSWD}/g" dbca_single.rsp
fi
#option memory gt 4G
if [[ ${MemTotle} -gt 4 ]];then
sed -i 's/automaticMemoryManagement=true/automaticMemoryManagement=false/g' \
/home/oracle/response/dbca_single.rsp
fi
#modify config file `SID`
if [[ ${SID} != 'oriedb' ]];then
sed -i "s/oriedb/${SID}/g" db_install.rsp
sed -i "s/oriedb/${SID}/g" dbca_single.rsp
fi
#modify oracle single instance default charset
if [[ ${SINGLE_CHARSET} == '2' ]]; then
sed -i 's/characterSet=AL32UTF8/characterSet=ZHS16GBK/g' dbca_single.rsp
fi
#copy config file to oracle home
cp /tmp/database/response/netca.rsp ${response}/netca.rsp
chown -R oracle:oinstall ${response}
}
#start install oracle software and start listen
function install_oracle() {
#start install oracle
oracle_out='/tmp/oracle.out'
su - oracle -c "/tmp/database/runInstaller -force -silent -noconfig \
-responseFile ${response}/db_install.rsp -ignorePrereq" 1> ${oracle_out}
echo -e "\033[34mInstallNotice >>\033[0m \033[32moracle install starting \033[05m...\033[0m"
while true; do
grep '[FATAL] [INS-10101]' ${oracle_out} &> /dev/null
if [[ $? == 0 ]];then
echo -e "\033[34mInstallNotice >>\033[0m \033[31moracle start install has [ERROR]\033[0m"
cat ${oracle_out}
exit
fi
cat /tmp/oracle.out | grep sh
if [[ $? == 0 ]];then
`cat /tmp/oracle.out | grep sh | awk -F ' ' '{print $2}' | head -1`
if [[ $? == 0 ]]; then
echo -e "\033[34mInstallNotice >>\033[0m \033[32mScript 1 run ok\033[0m"
else
echo -e "\033[34mInstallNotice >>\033[0m \033[31mScript 1 run faild\033[0m"
fi
`cat /tmp/oracle.out | grep sh | awk -F ' ' '{print $2}' | tail -1`
if [[ $? == 0 ]];then
echo -e "\033[34mInstallNotice >>\033[0m \033[32mScript 2 run ok\033[0m"
else
echo -e "\033[34mInstallNotice >>\033[0m \033[31mScript 2 run faild\033[0m"
fi
#start listen
echo -e "\033[34mInstallNotice >>\033[0m \033[32mOracle start listen \033[05m...\033[0m"
su - oracle -c "netca /silent /responsefile ${response}/netca.rsp"
netstat -anptu | grep 1521
if [[ $? == 0 ]]; then
echo -e "\033[34mInstallNotice >>\033[0m \033[32mOracle run listen\033[0m"
break
else
echo -e "\033[34mInstallNotice >>\033[0m \033[31mOracle no run listen\033[0m"
exit
fi
fi
done
}
#install oracle single instance
function single_instance() {
echo -e "\033[34mInstallNotice >>\033[0m \033[32mStart install single instance \033[05m...\033[0m"
#此安装过程会输入三次密码,超级管理员,管理员,库(这些密码也可以在配置文件中写)
su - oracle -c "dbca -silent -createDatabase -responseFile ${response}/dbca_single.rsp"
su - oracle -c "mkdir -p /data/app/oracle/oradata/${SID}/"
su - oracle -c "${con_name}" > /tmp/oracle.out1
su - oracle -c "${web_plugin}"
grep "${SID}" /tmp/oracle.out1
if [[ $? == 0 ]];then
echo -e "\033[34mInstallNotice >>\033[0m \033[32mOracle and instances install successful\033[0m"
echo -e "\033[34mYou can visit (http://${HostIP}:1522/em) for web management.\033[0m"
else
echo -e "\033[34mInstallNotice >>\033[0m \033[31mOracle install successful,but instances init faild\033[0m"
fi
rm -rf /tmp/oracle.out1
exit
}
#install oracle cdb instance
function cdb_pdb() {
echo -e "\033[34mInstallNotice >>\033[0m \033[32mStart install CDB \033[05m...\033[0m"
INIT_CDB_FILE="/data/app/oracle/product/12.1.0/db_1/dbs/initcdb.ora"
if [[ ${Get_Config_Method} == "1" ]]; then
rm -rf ${INIT_CDB_FILE}
cp ${root_path}/conf/initcdb.ora ${INIT_CDB_FILE}
else
wget https://raw.githubusercontent.com/yongxinzhang18810492456/xuexi/master/conf/initcdb.ora -O ${INIT_CDB_FILE}
fi
if [[ ${SID} != 'oriedb' ]];then
sed -i "s/oriedb/${SID}/g" ${INIT_CDB_FILE}
fi
if [[ ${MemTotle} -gt 4 ]];then
cdb_mem=`expr ${MemTotle} / 3`
proc=`expr 150 \* ${cdb_mem}`
sed -i "s/memory_target=1G/memory_target=${cdb_mem}G/g" ${INIT_CDB_FILE}
sed -i "s/processes = 150/processes = ${proc}/g" ${INIT_CDB_FILE}
fi
chown -R oracle:oinstall ${INIT_CDB_FILE}
su - oracle -c "
mkdir -p /data/app/oracle/oradata/${SID}
mkdir -p /data/app/oracle/oradata/pdbseed
mkdir -p /data/app/oracle/admin/${SID}/adump
mkdir -p /data/app/oracle/fast_recovery_area
"
echo ${cdb_sql}
su - oracle -c "${cdb_sql}"
su - oracle -c "sed -i '35s/util/Util/g' /data/app/oracle/product/12.1.0/db_1/rdbms/admin/catcdb.pl"
echo -e '\033[42;31mFollow the steps to run the following commands\033[0m
\033[34m1. $ \033[32msu - oracle\033[0m\033[0m
\033[34m2. $ \033[32mcd /data/app/oracle/product/12.1.0/db_1/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/\033[0m\033[0m
\033[34m3. $ \033[32mexport PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/perl/bin:$ORACLE_HOME/jdk/bin:$PATH\033[0m\033[0m
\033[34m4. $ \033[32msqlplus / as sysdba\033[0m\033[0m
\033[34m5. SQL > \033[32m@?/rdbms/admin/catcdb.sql\033[0m\033[0m
\033[34m Enter value for 1: \033[32m/data/app/oracle/product/12.1.0/db_1/rdbms/admin\033[0m\033[0m
\033[34m Enter value for 2: \033[32m/data/app/oracle/product/12.1.0/db_1/rdbms/admin/catcdb.pl\033[0m\033[0m
\033[34m Enter new password for SYS: \033[32msys user password\033[0m\033[0m
\033[34m Enter new password for SYSTEM: \033[32msystem user password\033[0m\033[0m
\033[34m Enter temporary tablespace name: \033[32mtablespace name\033[0m\033[0m
\033[34m6. SQL > \033[32mshow con_name;\033[0m\033[0m
\033[34m7. SQL > \033[32mshow pdbs;\033[0m\033[0m'
echo -e '\033[33mThe initialization process is relatively long. Please wait patiently.\033[0m'
echo -e '\033[33mCDB use reference: \033[34mhttps://www.cnblogs.com/zhichaoma/p/9328765.html\033[0m'
exit
}
#install oracle instance
function oracle_instance() {
#安装Oracle实例
if [[ ${IS_INSTANCE} == '1' ]]; then #install single instance
single_instance
elif [[ ${IS_INSTANCE} == '2' ]];then #install oracle cdb
cdb_pdb
else # not install instance
echo -e "\033[34mInstallNotice >>\033[0m \033[32mOracle install successful, but there are no instances of installation\033[0m"
exit
fi
}
function main() {
j_para && \
install_package && \
base_config && \
oracle_file && \
install_oracle && \
oracle_instance
}
#run script
main