前段日子开始学Oracle数据库,但是由于Oracle数据库的服务启动时间很长
所以机房的里面所有电脑的Oracle服务全部是被禁用的
所以每次上机使用的时候都要先进服务管理,然后把禁用更改为手动模式,再开启服务
再进sqlplus,系统用户登录之类的才能用,很是繁琐。
不仅如此,sqlplus还不支持使用右键菜单,只能改为编辑模式才能用复制粘贴等功能,也很麻烦
遂想做一个自动启动的程序,免去繁琐的操作。
最后还是用CMD脚本编写的。
说下特色吧:
1,使用此BAT启动的Oracle可以正常使用右键的复制粘贴查找等功能,因为是在CMD下启动程序,而不是直接在windows下打开,所以可以正常使用右键菜单
2,拥有超大5000行的缓冲区,基本上可以将几个小时以内的操作全部记录下来,默认的300行太少了,写不了几行代码再想看前面写的东西就都没了,所以增加到5000行,这个也是另外一个最重点的功能。
就 是自动设置缓冲区,没少费劲,因为设置缓冲区是要向注册表写入值,而且还是要重启CMD才有效的,这块的设置比较麻烦,如果是第一次运行此脚本就会发现程 序会闪好几下,那是检测到需要更改缓冲区,然后把相应的设置缓冲区的代码输出到当前目录下的set.bat文件,并退出当前bat去执行那个设置,完成后 再从新打开一遍此脚本,此时缓冲区就已经设置成功了。
当第二次打开时检测不需要修改缓冲区大小了,也就不会再出来闪屏的现象了。
3,可自定义颜色:请编辑第1行,color 07中0为背景颜色7为字体颜色,取值为0~F,反正我喜欢的还是标准的黑底灰字
4,可自定义缓冲区大小:请编辑第2行set BufferSize=13880050,其中1388为16进制的行数为5000行,0050为16进制的列数为50列,可以自行编辑
==注意==
※本BAT只能运行在WinXP或以上系统中,Win2000系统中reg命令不可用!
※本BAT的文件名中不得出现空格以及%或&等特殊符号,否则会出现异常!
※本BAT需运行在可写的目录下,否则设置缓冲区功能将失效,其他功能不受影响
※如果已安装了Oracle但无法使用本BAT请检测环境变量
※本BAT会写入注册表,如果想恢复系统的默认值请把第二行的设置缓冲区 set BufferSize=13880050改为012c0050,再重新运行一次即可恢复
※从第二行开始到:menu为止的命令均可删除,不影响使用
※如果出现意外情况发生CMD无限弹出的问题,可按Pause键停止弹出
在新CMD下执行taskkill /f /im cmd.exe命令关闭全部已弹出的窗口
使用方法极其简单,如果是一般正常使用的话打开后之后回车即可以SYS用户登陆数据库
如果有其他需求的话再选择其他功能,默认为选择第一项
批处理代码,保存到bat文件运行即可:
@echo off&color 07&title Oracle启动助手 By:小小沧海 ::要设置的缓冲区大小 set BufferSize=13880050 set myname="%~n0" if NOT %myname%==%myname: =% echo [错误]本BAT文件名中不可出现空格或&或%等特殊符号!请修改后再运行&echo 按任意键退出...&pause>nul&exit ::=============检测当前系统CMD的缓冲区大小是否为设置值========== reg query "HKCUConsole\%%SystemRoot%%_system32_cmd.exe" /v ScreenBufferSize ::查询注册表中是否有CMD的记录,如果没有则直接去设置“缓冲区大小” if %errorlevel% ==1 goto :setBufferSize reg query "HKCUConsole\%%SystemRoot%%_system32_cmd.exe" /v ScreenBufferSize |find "ScreenBufferSize">%temp%value.txt ::读取CMD的ScreenBufferSize的值到临时目录下的Value.txt文件中 set/p value=<%temp%value.txt set value=%value:x=00% ::再读回内存变量中,如果相等则直接进入菜单 if %value:~-8%==%BufferSize% del %temp%value.txt & goto menu ::=================生成设置缓冲区大小的BAT文件================== :setBufferSize ::如果查询到的缓冲区大小不符设置则将下述命令输出到set.bat执行设置操作 echo @echo off>set.bat (::设置CMD的缓冲区大小为高度5000(高4位1388),宽不变为80(低4位0050) echo reg add "HKCUConsole\%%%%SystemRoot%%%%_system32_cmd.exe" /v ScreenBufferSize /t REG_DWORD /d 0x%BufferSize% /f ::设置CMD的窗口大小为高度25(高4位0019),宽不变为80(低4位0050) echo reg add "HKCUConsole\%%%%SystemRoot%%%%_system32_cmd.exe" /v WindowSize /t REG_DWORD /d 0x00190050 /f echo start %~nx0 ^& del %%0 ^& exit )>>set.bat start set.bat&exit ::检测Oracle是否已经安装 sqlplus -v 1>nul 2>nul if %errorlevel% == 9009 echo Oracle没有正确安装,按任意键退出...&pause>nul&exit :menu cls echo 正在将所有Oracle服务设置为[手动启动]模式,请稍后... sc config OracleDBConsoleorcl start= demand 1>nul sc config OracleJobSchedulerORCL start= demand 1>nul sc config OracleMTSRecoveryService start= demand 1>nul sc config OracleOraDb11g_home1ClrAgent start= demand 1>nul sc config OracleOraDb11g_home2ClrAgent start= demand 1>nul sc config OracleOraDb11g_home2TNSListener start= demand 1>nul sc config OracleServiceORCL start= demand 1>nul echo 设置成功! cls echo ┏━━━━━━━━━━━━━━Oracle启动助手━━━━━━━━━━━━━━━━┓ echo ┃ 1,直接回车只启动OracleServiceORCL服务并以sys用户登陆系统 ┃ echo ┃ 2,启动全部Oracle服务 ┃ echo ┃ 3,以sys用户登陆系统 ┃ echo ┃ 4,关闭全部Oracle服务 ┃ echo ┃ 5,相关说明 ┃ echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ::echo 当前Oracle版本: ::sqlplus -v echo [请选择]:(按数字键回车确认/如选择1则直接回车) set choose=1&set /p choose= if %choose%==1 goto 1 if %choose%==2 goto 2 if %choose%==3 goto 3 if %choose%==4 goto 4 if %choose%==5 (goto 5) else echo 选择错误!请重新选择&pause>nul&goto menu :1 echo 正在启动OracleServiceORCL服务,可能需要1-2分钟 echo 请稍等... net start OracleServiceORCL sqlplus sys/null as sysdba goto end :2 echo 正在启动全部Oracle服务,可能需要1-2分钟 echo 请稍等... net start OracleDBConsoleorcl net start OracleJobSchedulerORCL net start OracleMTSRecoveryService net start OracleOraDb11g_home1ClrAgent net start OracleOraDb11g_home2ClrAgent net start OracleOraDb11g_home2TNSListener net start OracleServiceORCL echo 按任意键继续^>^>&pause>nul&goto menu :3 echo 以sys用户登陆系统... sqlplus sys/null as sysdba echo 按任意键继续^>^>&pause>nul&goto menu :4 echo 正在关闭全部Oracle服务... net stop OracleDBConsoleorcl 1>nul 2>nul net stop OracleJobSchedulerORCL 1>nul 2>nul net stop OracleMTSRecoveryService 1>nul 2>nul net stop OracleOraDb11g_home1ClrAgent 1>nul 2>nul net stop OracleOraDb11g_home2ClrAgent 1>nul 2>nul net stop OracleOraDb11g_home2TNSListener 1>nul 2>nul net stop OracleServiceORCL 1>nul 2>nul echo 操作完成! echo 按任意键继续^>^>&pause>nul&goto menu :5 cls echo ┏━━━━━━━━━━━━━━━━━说明━━━━━━━━━━━━━━━━━━┓ echo ┃ ¤使用此BAT启动的Oracle可以正常使用右键的复制粘贴查找等功能 ┃ echo ┃ ¤拥有超大5000行的缓冲区,基本上可以将几个小时以内的操作全部记录下来 ┃ echo ┃ ¤可自定义颜色:请编辑第1行,color 07中0为背景颜色7为字体颜色,取值为0~F ┃ echo ┃ ¤可自定义缓冲区大小:请编辑第2行,1388为16进制的行数,0050为16进制的列数 ┃ echo ┃ ==注意== ┃ echo ┃ ※本BAT只能运行在WinXP或以上系统中,Win2000系统中reg命令不可用! ┃ echo ┃ ※本BAT的文件名中不得出现空格以及%或&等特殊符号,否则会出现异常! ┃ echo ┃ ※本BAT需运行在可写的目录下,否则设置缓冲区功能将失效,其他功能不受影响!┃ echo ┃ ※如果已安装了Oracle但无法使用本BAT请检测环境变量 ┃ echo ┃ ※本BAT会写入注册表,如果想恢复系统的默认值请把第二行的设置缓冲区 ┃ echo ┃ set BufferSize=13880050改为012c0050,再重新运行一次即可恢复 ┃ echo ┃ ※从第二行开始到:menu为止的命令均可删除,不影响使用 ┃ echo ┃ ※如果出现意外情况发生CMD无限弹出的问题,可按Pause键停止弹出 ┃ echo ┃ 在新CMD下执行taskkill /f /im cmd.exe命令关闭全部已弹出的窗口 ┃ echo ┃ ┃ echo ┃ 2011年3月1日 ┃ echo ┃ 小小沧海 ┃ echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ echo.&echo 按任意键返回主菜单^>^>&pause>nul&goto menu :end exit ERRORLEVEL: 0 - 成功 1 - 失败 9009 - 命令无效 sc config 服务名称 start= demand(设置服务为手动启动) sc config 服务名称 start= disabled(设置服务为禁用) sc config 服务名称 start= auto(设置服务为自动)
——原文发表于2011-3-11 14:48