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