1、先前笔者的项目经理让写一个数据库巡检的小工具,本人就用最简单方式bat脚本通过sqlplus查询数据库,获取数据库信息;
第一步
先写一个通过读取sql文件(这样可随意配置查询sql)查询数据库的bat脚本,很简单几句而已
@echo off
echo 正在执行219.bat
sqlplus -l hospital_his_bjxn/hospital_his_bjxn@192.168.182.128:1521/orclwbc @..\sql配置\cfg.sql > ..\输出目录\219.txt
:exit
第二步
再写一个sql配置文件
SELECT A.TABLESPACE_NAME "表空间名",
TOTAL "表空间大小",
FREE "表空间剩余大小",
(TOTAL - FREE) "表空间使用大小",
TOTAL / (1024 * 1024 * 1024) "表空间大小(G)",
FREE / (1024 * 1024 * 1024) "表空间剩余大小(G)",
(TOTAL - FREE) / (1024 * 1024 * 1024) "表空间使用大小(G)",
ROUND((TOTAL - FREE) / TOTAL, 4) * 100 "使用率 %"
FROM (SELECT TABLESPACE_NAME, SUM(BYTES) FREE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) A,
(SELECT TABLESPACE_NAME, SUM(BYTES) TOTAL
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME;
exit;
第三步
在写一个统一调度的bat脚本,其实就是bat调bat(用Java也可以太麻烦)一对多关系
@echo off
cd /d %cd%\数据库连接配置
echo 219数据库开始执行...
call 219.bat
echo 219数据库开始完毕...
echo 218数据库开始执行...
call 218.bat
echo 218数据库开始完毕...
pause
这样就完成了一个很简单的小工具,当然也可以定时查询,经理没说就没花时间弄,这里主要是说我遇到的问题
这期间遇到了标题上的问题,网上很多解决办法都试过最后无果,其实就是简单的编码问题由于远程没法调控找其他解决办法,果断去 “墙” 那边找技术资料最后经过尝试,结果sqlplus读取sql文件编码问题【报错 SP2-0042:未知的命令】只需要在sql文件前加一个回车空行就行,在这种情况下sql文件里前面没有空行就算加上【set lines 2000;】都会报错,加一个空行也会报错,但不影响使用