使用bat批处理读取注册表来提取Oracle环境变量的方法

本文所示提取的Oracle环境变量用ORACLE_HOME作为代表!

在linux或者unix环境上,很容易得到Oracle数据库的环境变量信息,比如:查看ORACLE_HOME

[oracle@centos5 ~]$ echo $ORACLE_HOME
/u01/oracle/product/11.2

在windows上可能稍微麻烦些了。如果windows系统上安装了Oracle服务器的话,正常情况下是有ORACLE_HOME这个环境变量的。

C:\>echo %oracle_home%
e:\oracle\db_1

将环境变量oracle_home赋值给其它变量用:set abc="%oracle_home%"

如果Oracle服务器的环境变量配置不正确或者只安装了Oracle客户端程序的话,本文将给出提取ORACLE_HOME的方法。

提取注册表使用的命令为:reg query 或者 reg export,命令语法为:

REG QUERY KeyName [/v ValueName | /ve] [/s]

REG EXPORT KeyName FileName

查看命令的具体参数,使用:reg export /? 或者 reg query /?

Oracle数据库安装完成后,在注册表中可以找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE子项,其中包含Oracle数据库、客户端还有其它产品的子项。

如果清楚ORACLE_HOME项具体位置的话,使用reg query可以查询到:

C:\>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1" /v ORACLE_HOME

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1
    ORACLE_HOME REG_SZ  C:\Oracle\product\10.1.0\Client_1

如果不能确定ORACLE_HOME项所在的子项位置的话,使用:

C:\>reg export "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE" oracle_env.reg

操作成功结束

C:\>type oracle_env.reg
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE]
"inst_loc"="C:\\Program Files\\Oracle\\Inventory"

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1]
"ORACLE_HOME"="C:\\Oracle\\product\\10.1.0\\Client_1"
"ORACLE_HOME_NAME"="OraClient10g_home1"
"ORACLE_GROUP_NAME"="Oracle - OraClient10g_home1"
"NLS_LANG"="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
"ORACLE_BUNDLE_NAME"="Enterprise"
"SQLPATH"="C:\\Oracle\\product\\10.1.0\\Client_1\\dbs"
"ORACLE_HOME_KEY"="SOFTWARE\\ORACLE\\KEY_OraClient10g_home1"

下面对提取到的oracle_env.reg文件进行字符处理以得到ORACLE_HOME变量。

先提取ORACLE_HOME变量所在的行:

C:\>find """ORACLE_HOME""=" oracle_env.reg

---------- ORACLE_ENV.REG
"ORACLE_HOME"="C:\\Oracle\\product\\10.1.0\\Client_1"

使用for命令提取ORACLE_HOME右边的目录:

find """ORACLE_HOME""=" oracle_env.reg>temp1.txt
for /f "skip=2 tokens=1,2 delims==" %a in (temp1.txt) do echo %b

"C:\\Oracle\\product\\10.1.0\\Client_1"

需要将"C:\\Oracle\\product\\10.1.0\\Client_1"中的\\替换成\即可。set "my_oracle_home=%b:\\=\%"

合并起来,

@echo off
reg export "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE" oracle_env.reg
find """ORACLE_HOME""=" oracle_env.reg>temp1.txt
for /f "skip=2 tokens=1,2 delims==" %a in (temp1.txt) do (
set "b=%b"
)
set "my_oracle_home=%b:\\=\%"
echo %my_oracle_home%

注意如果将上述命令写到bat文件中的话,需要将%a和%b分别替换为:%%a和%%b。下载脚本文件:get_env_by_reg_export.bat

如果知道ORACLE_HOME所在子项为KEY_OraClient10g_home1的话,可以使用下面的语句:

@echo off
reg query "HKLM\SOFTWARE\ORACLE\KEY_OraClient10g_home1" /v ORACLE_HOME >temp.txt 2>nul
if %ERRORLEVEL% gtr 0 goto end
set x=""
set y=""
for /f "skip=4 tokens=1,2 delims=:" %a in (temp.txt) do (
set "x=%a"
set "y=%b" )
set "my_oracle_home=%x:~-1%:%y%"
echo "%my_oracle_home%"
del /Q temp.txt
goto exit
:end
echo "ORACLE_HOME不存在!"
:exit

下载脚本文件:get_env_by_reg_query.bat

  • 本文链接地址:http://www.sybrepair.com/get-oracle_home-by-reg-query.htm
  • 本文为dbainfo个人原创,请在尊重作者劳动成果的前提下进行转载;
  • 转载务必注明原始出处 : Sybase数据库技术,数据库恢复专家
  • 对《使用bat批处理读取注册表来提取Oracle环境变量的方法》有何疑问或见解,请在本文下方发表;
  • 对网站还有其他问题或建议,请提交在留言板,谢谢!
  • 目前还没有任何评论.
    :wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)