forked from derekp7/snebu
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsnebu-oracle-plugin
112 lines (103 loc) · 2.79 KB
/
snebu-oracle-plugin
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
# Oracle plugin for snebu-client
# Run a given sql script as Oracle user
sql() {
su - oracle -c "ORACLE_SID=$2 sqlplus -s / as sysdba" <<-EOT
set pages 0
set heading off
set feedback off
$1
exit
EOT
}
# Begin hot backup
ora_hbb() {
sql "alter database begin backup;" $1
}
# End hot backup
ora_hbe() {
sql "alter database end backup;
alter database backup controlfile to '${archlogdest}/control0x.ctl' reuse;
alter system archive log current;" $1
}
# Put database in archivelog mode
ora_arc() {
sql "alter system archive log current;" $1
}
# Get list of Oracle data files used for various purposes
dbfiles() {
dbfilelist=( $(sql "select name from v\$datafile;" $1) )
dbtempfilelist=( $(sql "select name from v\$tempfile;" $1) )
archlogdest=( $(sql "select destination from v\$archive_dest where destination is not null;" $1) )
controlfilelist=( $(sql "select name from v\$controlfile;" $1) )
loglist=( $(sql "select member from v\$logfile;" $1) )
spfile=( $(sql "select value from v\$parameter where name = 'spfile';" $1) )
}
getsidlist() {
sidlist=( $(grep ':Y$' /etc/oratab |cut -d: -f1) )
}
ora_pluginpre() {
if [ "${cursid}" -lt "${maxsid}" ]
then
OLD_INCLUDE=( "${INCLUDE[@]}" )
OLD_EXCLUDE=( "${EXCLUDE[@]}" )
OLD_EXCLUDEPAT=( "${EXCLUDEPAT[@]}" )
EXCLUDE=( )
EXCLUDEPAT=( )
sid=${sidlist[${cursid}]}
if [ -n "${clientname}" ]
then
rpcsh -h ${clientname} -u "${rmtuser}" -f 'dbfiles sql' -r 'dbfilelist dbtempfilelist archlogdest controlfilelist loglist spfile' -v 'sid' -m "dbfiles ${sid}"
else
dbfiles ${sid}
fi
if [ "${stage}" = 0 ]
then
INCLUDE=( "${dbfilelist[@]}" "${dbtempfilelist[@]}" "${loglist[@]}" "${controlfilelist[@]}" )
if [ -n "${clientname}" ]
then
rpcsh -h ${clientname} -u "${rmtuser}" -f 'ora_hbb sql' -v 'sid' -m "ora_hbb ${sid}"
else
ora_hbb ${sid}
fi
elif [ "${stage}" = 1 ]
then
INCLUDE=("${archlogdest[@]}" "${spfile[@]}" )
fi
else
bkrepeat=0
fi
}
ora_pluginpost() {
if [ "${cursid}" -lt "${maxsid}" ]
then
INCLUDE=( "${OLD_INCLUDE[@]}" )
EXCLUDE=( "${OLD_EXCLUDE[@]}" "${dbfilelist[@]}" "${dbtempfilelist[@]}" "${loglist[@]}" "${controlfilelist[@]}" "${archlogdest[@]}" "${spfile[@]}" )
EXCLUDEPAT=( "${OLD_EXCLUDEPAT[@]}" )
if [ "${stage}" = 0 ]
then
if [ -n "${clientname}" ]
then
rpcsh -h ${clientname} -u "${rmtuser}" -f 'ora_hbe sql' -v 'sid archlogdest' -m "ora_hbe ${sid}"
else
ora_hbe ${sid}
fi
stage=1
elif [ "${stage}" = 1 ]
then
cursid=$((${cursid} + 1))
stage=0
fi
bkrepeat=1
fi
}
if [ -n "${clientname}" ]
then
rpcsh -h ${clientname} -u "${rmtuser}" -f 'getsidlist' -r 'sidlist' -m 'getsidlist'
else
getsidlist
fi
cursid=0
stage=0
maxsid=${#sidlist[@]}
pluginpre=ora_pluginpre
pluginpost=ora_pluginpost