-
Notifications
You must be signed in to change notification settings - Fork 16
/
frastat
executable file
·178 lines (160 loc) · 8.95 KB
/
frastat
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
#!/bin/env python
##################################################################################################
# Name: frastat #
# Author: Randy Johnson #
# Description: Report information on the fast recovery area (FRA). #
# #
# Usage: frastat [options] #
# #
# Options:
# -h, --help show this help message and exit #
# -f FRA Space Usage by File Type #
# -e FRA Status Extended Report #
# --s print SQL query. #
# --v print version info. #
# #
# History: #
# #
# Date Ver. Who Change Description #
# ---------- ---- ---------------- ------------------------------------------------------------- #
# 09/16/2015 1.00 Randy Johnson Initial write. #
##################################################################################################
# --------------------------------------
# ---- Import Python Modules -----------
# --------------------------------------
from optparse import OptionParser
from os import environ
from os.path import basename
from sys import argv
from sys import exit
from sys import version_info
from signal import SIGPIPE
from signal import SIG_DFL
from signal import signal
from Oracle import RunSqlplus
from Oracle import SetOracleEnv
from Oracle import ParseConnectString
from Oracle import PrintError
# --------------------------------------
# ---- Main Program --------------------
# --------------------------------------
if (__name__ == '__main__'):
Cmd = basename(argv[0]).split('.')[0]
CmdDesc = 'Recovery Area Status'
Version = '1.00'
VersionDate = 'Sun Sep 25 14:04:25 CDT 2016'
DevState = 'Production'
Banner = CmdDesc + ': Release ' + Version + ' ' + DevState + '. Last updated: ' + VersionDate
Rcv = ''
Sql = ''
SqlHeader = '/***** ' + CmdDesc.upper() + ' *****/'
ErrChk = False
ArgParser = OptionParser()
ConnStr = ''
# For handling termination in stdout pipe; ex: when you run: oerrdump | head
signal(SIGPIPE, SIG_DFL)
ArgParser.add_option('-f', dest='FraFiles', action='store_true', default=False, help="FRA Space Usage by File Type")
ArgParser.add_option('-e', dest='Extended', action='store_true', default=False, help="FRA Status Extended Report")
ArgParser.add_option('--s', dest='Show', action='store_true', default=False, help="print SQL query.")
ArgParser.add_option('--v', dest='ShowVer', action='store_true', default=False, help="print version info.")
# Parse command line arguments
Options, args = ArgParser.parse_args()
FraFiles = Options.FraFiles
Extended = Options.Extended
Show = Options.Show
ShowVer = Options.ShowVer
if (ShowVer == True):
print('\n%s' % Banner)
exit()
if (FraFiles == True and Extended == True):
print('\n*Extended report format (-e) not available with -f option.')
if (FraFiles == True):
Sql += "col file_type format a20 heading 'File Type'\n"
Sql += "col percent_space_used format 999.99 heading 'Pct Used'\n"
Sql += "col percent_space_reclaimable format 999.99 heading 'Pct Reclaimable'\n"
Sql += "col actual_percent_used format 999.99 heading 'Actual Pct Used'\n"
Sql += "col number_of_files format 999,999,999 heading 'File Count'\n"
Sql += "\n"
Sql += " SELECT " + SqlHeader + "\n"
Sql += " file_type\n"
Sql += " , percent_space_used\n"
Sql += " , percent_space_reclaimable\n"
Sql += " , percent_space_used-percent_space_reclaimable \"actual_percent_used\"\n"
Sql += " , number_of_files\n"
Sql += " FROM v$flash_recovery_area_usage\n"
Sql += "ORDER BY file_type;"
else:
if (Extended == True):
Sql += "col name format a20 heading 'Name'\n"
Sql += "col space_limit format 999,999.99 heading 'GB Limit'\n"
Sql += "col space_used format 999,999.99 heading 'GB Used'\n"
Sql += "col space_pct_used format 999,999.99 heading 'Pct Used'\n"
Sql += "col space_reclaimable format 999,999.99 heading 'GB Reclaimable'\n"
Sql += "col actual_used format 999,999.99 heading 'Actual GB Used'\n"
Sql += "col actual_pct_free format 999.000 heading 'Actual Pct Free'\n"
Sql += "col actual_pct_used format 999.000 heading 'Actual Pct Used'\n"
Sql += "col number_of_files format 999,999,999 heading 'File Count'\n"
Sql += "\n"
Sql += " SELECT " + SqlHeader + "\n"
Sql += " name\n"
Sql += " , space_limit/1024/1024/1024 \"space_limit\"\n"
Sql += " , space_used/1024/1024/1024 \"space_used\"\n"
Sql += " , ((space_used/1024/1024/1024) / (space_limit/1024/1024/1024)) * 100 \"space_pct_used\"\n"
Sql += " , space_reclaimable/1024/1024/1024 \"space_reclaimable\"\n"
Sql += " , (space_used-space_reclaimable)/1024/1024/1024 \"actual_used\"\n"
Sql += " , ((((space_limit/1024/1024/1024) - (space_used-space_reclaimable)/1024/1024/1024)) / (space_limit/1024/1024/1024)) * 100 \"actual_pct_free\"\n"
Sql += " , ((space_used-space_reclaimable)/1024/1024/1024) / (space_limit/1024/1024/1024) * 100 \"actual_pct_used\"\n"
Sql += " , number_of_files\n"
Sql += " FROM v$recovery_file_dest;"
else:
Sql += "col name format a20 heading 'Name'\n"
Sql += "col space_limit format 999,999.99 heading 'GB Limit'\n"
Sql += "col space_used format 999,999.99 heading 'GB Used'\n"
Sql += "col space_pct_used format 999,999.99 heading 'Pct Used'\n"
Sql += "col space_reclaimable format 999,999.99 heading 'GB Reclaimable'\n"
Sql += "col number_of_files format 999,999,999 heading 'File Count'\n"
Sql += "\n"
Sql += " SELECT " + SqlHeader + "\n"
Sql += " name\n"
Sql += " , space_limit/1024/1024/1024 \"space_limit\"\n"
Sql += " , space_used/1024/1024/1024 \"space_used\"\n"
Sql += " , ((space_used/1024/1024/1024) / (space_limit/1024/1024/1024)) * 100 \"space_pct_used\"\n"
Sql += " , space_reclaimable/1024/1024/1024 \"space_reclaimable\"\n"
Sql += " , number_of_files\n"
Sql += " FROM v$recovery_file_dest;"
if(Show):
print('-----------cut-----------cut-----------cut-----------cut-----------cut-----------')
print(Sql)
print('-----------cut-----------cut-----------cut-----------cut-----------cut-----------')
exit()
# Check/setup the Oracle environment
if (not('ORACLE_SID' in list(environ.keys()))):
print('ORACLE_SID is required.')
exit(1)
else:
# Set the ORACLE_HOME just in case it isn't set already.
if (not('ORACLE_HOME' in list(environ.keys()))):
(OracleSid, OracleHome) = SetOracleEnv(environ['ORACLE_SID'])
# Parse the connect string if any, prompt for username, password if needed.
if (len(args) > 0 and Show == False):
InStr = args[0]
ConnStr = ParseConnectString(InStr)
# Execute the report
if (FraFiles == True):
print("\nReport Space Usage of FRA by File Type:")
else:
if (Extended == True):
print("\nReport Space Usage of FRA (extended format)")
else:
print("\nReport Space Usage of FRA:")
if (ConnStr != ''):
(Stdout) = RunSqlplus(Sql, ErrChk, ConnStr)
else:
(Stdout) = RunSqlplus(Sql, ErrChk)
# Print the report
if (Stdout != ''):
print('\n%s' % Stdout)
exit(0)
# --------------------------------------
# ---- End Main Program ----------------
# --------------------------------------