一个开启Oracle服务和更改主机名的脚本
一个开启Oracle服务和更改主机名的脚本
真不知道该起一个什么题目,这是昨天数据库老师提出的问题。由于实验室的机器都装了还原卡,每次开机或重启都会回到初始状态,所以数库的listener.ora、tnsnames.ora文件里的host不是本机的计算机名,每次都需要手动修改,很麻烦。所需要写一个脚本来自动化的完成这个任务。第一次写技术博客,不知道问题描述清楚了没有。
我分是两部分完成的,开启服务和获取主机名是用批处理命令,然后把主机名作为参数传入一个python脚本来完成对文件的修改。下面是批处理部分,文件名start.bat :
01 @echo off 02 rem 这是注释 03 04 rem 获取计算机名 05 python update.py %computername% 06 07 rem 开启Oracle服务 08 net start OracleServiceORCL 09 net start OracleOraDb10g_home1TNSListener 10 11 pause update.py: 01 #coding=utf-8 02 import sys 03 04 print u"计算机名:" 05 print sys.argv[1] 06 07 print u"见证奇迹的时刻。。。" 08 09 #修改主机名 10 def update_file(path,old_name,new_name): 11 """ 12 python 不能直接修改文本的内容,尝试了几种方法,发现下面的方法比较好。 13 先取出文件的内容,查找替换计算机名,重写写入覆盖原来的文件。 14 注意:用 w 或 w+ 方式打开文件时可以写入,如果文件名存在,会先清除原来的内容。 15 """ 16 file = open(path,'r+') 17 content = file.read() 18 content = content.replace(old_name, new_name) 19 file.close() 20 file = open(path,'w+') 21 file.write(content) 22 file.close() 23 return 24 25 #三个文件的路径 26 path1 = 'C:/oracle/product/10.2.0/db_1/NETWORK/ADMIN/listener.ora' 27 path2 = 'C:/oracle/product/10.2.0/db_1/NETWORK/ADMIN/tnsnames.ora' 28 path3 = 'C:/oracle/product/10.2.0/client_1/NETWORK/ADMIN/tnsnames.ora' 29 30 #文件里的计算机名和本机的计算机名 31 old_name = 'sdwh119' 32 new_name = sys.argv[1] 33 34 update_file(path1, old_name, new_name) 35 update_file(path2, old_name, new_name) 36 update_file(path3, old_name, new_name)
后来发现实验室里虽然都有python,但是环境变量没有配置,所以每次开机还要先配置python的环境变量:“C:\Python27;”。两个脚本都很简单,但是也不是一下就写出来的。批处理的内容都是现学现卖。
下面是一个同学完全使用批处理的做法,现在还是有几个符号看不懂,也不想懂了:
01 @echo off 02 setlocal enabledelayedexpansion 03 cd\ 04 cd oracle\product\10.2.0\db_1\NETWORK\ADMIN 05 for /f "delims=" %%a in (tnsnames.ora) do ( 06 set aa=%%a 07 set aa=!aa:sdwh119=%computername%! 08 echo !aa!>>temp.txt 09 ) 10 del tnsnames.ora 11 ren temp.txt tnsnames.ora 12 for /f "delims=" %%a in (listener.ora) do ( 13 set aa=%%a 14 set aa=!aa:sdwh119=%computername%! 15 echo !aa!>>temp.txt 16 ) 17 del listener.ora 18 ren temp.txt listener.ora 19 cd\ 20 cd oracle\product\10.2.0\client_1\NETWORK\ADMIN 21 for /f "delims=" %%a in (tnsnames.ora) do ( 22 set aa=%%a 23 set aa=!aa:sdwh119=%computername%! 24 echo !aa!>>temp.txt 25 ) 26 del tnsnames.ora 27 ren temp.txt tnsnames.ora 28 net start OracleServiceORCL 29 net start OracleOraDb10g_home1TNSListener