当前位置:数据库 > Oracle >>

一个开启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

 


CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,