好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Windows下编写批处理脚本来启动和重置Oracle数据库

cmd启动Oracle数据库
新建一个bat文件,复制内容进去,双击即可启动.

?

1

2

3

4

@ echo off

net start OracleXETNSListener 2>nul

net start OracleServiceXE 2>nul

@oradim -startup -sid XE -starttype inst > nul 2>&1

 

Oracle重置数据库命令
新建bat文件,复制以下内容,然后执行。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

@ echo off

REM

REM The script assumes that user can connect using "/ as sysdba"

REM

REM =================

REM Restore procedure

REM =================

REM

REM If Installed Oracle home is also lost and oracle binaries were

REM re -installed or the Oracle is installed to new oracle home location

REM compared to backup time, then user will be prompted to enter Flash

REM Recovery Area location.

REM

REM For database in NoArchiveLog mode, database is restored to last offline

REM backup time/scn;

REM For database in Archive log mode, database is restored from last backup

REM and a complete recovery is attempted. If complete recovery fails,

REM user can open the database with resetlogs option provided the files

REM are not recovery fuzzy.

REM

REM The restore log is saved in ?/DATABASE/OXE_RESTORE.LOG

REM

 

setlocal

 

set /p inp= "This operation will shut down and restore the database. Are you sure [Y/N]?"

:checkinp

if /i "%inp%" == "Y" goto :confirmedyes

if /i "%inp%" == "n" exit

:Askagain

set /p inp=

goto :checkinp

 

:confirmedyes

 

echo Restore in progress...

 

echo db_name=xe >%temp%\rman_dummy.ora

echo sga_target=270M >>%temp%\rman_dummy.ora

 

 

net start oracleserviceXe

 

REM Startup database in nomount mode using RMAN...

@(

echo set echo on^;

echo startup nomount pfile=%temp%\rman_dummy.ora force^;

) > %temp%\restore_rman0.dat

rman target / @%temp%\restore_rman0.dat

if not %errorlevel% == 0 set Errorstr= RMAN Error - could not startup dummy instance & goto :restorefailederr

 

@(

echo connect / as sysdba^;

echo set head off

echo set echo off

echo set linesize 515

echo variable var varchar2^(512^)^;

echo execute :var := sys.dbms_backup_restore.normalizefilename^(^ 'SPFILE2INIT^' ^)^;

echo spool %temp%\spfile2init.log

echo select sys.dbms_backup_restore.normalizefilename^(^ 'SPFILE2INIT.ORA^' ^) spfile2init from dual^;

echo exit^;

) > %temp%\spfile2init.sql

sqlplus /nolog @%temp%\spfile2init.sql >nul

FOR /F %%i in (%temp%\spfile2init.log) do set SPFILE2INIT=%%i

 

@(

echo connect / as sysdba;

  echo set head off

  echo set echo off

  echo set linesize 515

  echo variable var varchar2^(512^)^;

  echo execute :var := sys.dbms_backup_restore.normalizefilename^(^ 'FRA_LOC^' ^)^;

  echo spool %temp%\restore_rmanlog.log

  echo select sys.dbms_backup_restore.normalizefilename^(^ 'OXE_RESTORE.LOG^' ^) RESTORE_RMANLOG from dual^;

  echo exit^;

) > %temp%\restore_rmanlog.sql

sqlplus /nolog @%temp%\restore_rmanlog.sql >nul

FOR /F %%i in (%temp%\restore_rmanlog.log) do set RESTORE_RMANLOG=%%i

 

if not exist ^ "%SPFILE2INIT%^" goto get_rcvarea_loc

@(

  echo set echo on^;

  echo shutdown immediate^;

  echo startup nomount pfile=^ "%SPFILE2INIT%^" ^;

  echo restore ^(spfile from autobackup^) ^(controlfile from autobackup^)^;

  echo startup mount force^;

  echo configure controlfile autobackup off^;

  echo restore database^;

) > %temp%\restore_rman1.dat

rman target / @%temp%\restore_rman1.dat trace "%RESTORE_RMANLOG%"

if not %errorlevel% == 0 set Errorstr= RMAN Error - See log for error & goto :restorefailederr

goto restored_files

 

:get_rcvarea_loc

set /p rcvarea_loc= "Enter the flash recovery area location:"

@(

  echo set echo on^;

  echo restore ^(spfile from autobackup db_recovery_file_dest=^ '%rcvarea_loc%^' ^)^;

  echo startup nomount force^;

  echo restore ^(controlfile from autobackup^)^;

  echo alter database mount ^;

  echo configure controlfile autobackup off^;

  echo restore database^;

) > %temp%\restore_rman1.dat

rman target / @%temp%\restore_rman1.dat trace "%RESTORE_RMANLOG%"

if not %errorlevel% == 0 set Errorstr= RMAN Error - See log for error & goto :restorefailederr

goto restored_files

 

:restored_files

@(

  echo connect / as sysdba^;

  echo declare cursor n1 is select name from v $tempfile ^;

  echo begin

  echo for a in n1

  echo loop

  echo begin

  echo sys.dbms_backup_restore.deletefile^(a.name^)^;

  echo exception

  echo when others then

  echo null^;

  echo end^;

  echo end loop^;

  echo end^;

  echo /

  echo exit^;

  echo /

) > %temp%\deltfile.sql

sqlplus /nolog @%temp%\deltfile.sql >nul

@(

  echo connect / as sysdba^;

  echo set head off

  echo set echo off

  echo spool %temp%\logmode.log

  echo select log_mode from v $database ^;

  echo exit^;

) > %temp%\logmode.sql

sqlplus /nolog @%temp%\logmode.sql >nul

FOR /F %%i in (%temp%\logmode.log) do set LOGMODE=%%i

 

if "%LOGMODE%" == "NOARCHIVELOG" goto process_noarchivelog

if "%LOGMODE%" == "ARCHIVELOG" goto process_archivelog

set Errorstr= Unknown log mode : %LOGMODE%

goto :restorefailederr

 

:process_noarchivelog

@(

  echo set echo on^;

  echo alter database open resetlogs;

) > %temp%\restore_rman2.dat

rman target / @%temp%\restore_rman2.dat trace "%RESTORE_RMANLOG%" append

if not %errorlevel% == 0 set Errorstr= RMAN Error - See log for details & goto :restorefailederr

goto :restoresucess

 

:process_archivelog

@(

  echo set echo on^;

  echo recover database^;

  echo alter database open resetlogs;

) > %temp%\restore_rman2.dat

rman target / @%temp%\restore_rman2.dat trace "%RESTORE_RMANLOG%" append

if not %errorlevel% == 0 set Errorstr= RMAN Error - See log for details & goto :restorefailederr

goto :restoresucess

 

:restoresucess

echo Restore of the database succeeded.

echo Log file is at %RESTORE_RMANLOG%.

pause Press any key to exit

exit

goto :EOF

 

:restorefailederr

echo ==================== ERROR =============================

echo Restore of the database failed.

echo %Errorstr%.

echo Log file is at %RESTORE_RMANLOG%.

echo ==================== ERROR =============================

pause Press any key to exit

exit

goto :EOF

查看更多关于Windows下编写批处理脚本来启动和重置Oracle数据库的详细内容...

  阅读:22次