Натолкнулся на перечень пользователей оракла с паролями по умолчанию. Бегом менять пароли. Хотя, проверил самого крутого пользователя dmsys и менее страшного outln которые были у меня в базе. Эти товарисчи заблокированны. Но чем черт не шутит.
1. Oracle
Product Internet Directory Service
User ID cn=orcladmin
Password welcome
2. Oracle
Product Oracle
User ID LBACSYS
Password LBACSYS
3. Oracle
Product Oracle
User ID OAS_PUBLIC
Password OAS_PUBLIC
4. Oracle
Product Oracle
User ID MXAGENT
Password MXAGENT
5. Oracle
Product Oracle
User ID MTS_USER
Password MTS_PASSWORD
6. Oracle
Product Oracle
User ID MASTER
Password PASSWORD
7. Oracle
Product Oracle
User ID LIBRARIAN
Password SHELVES
8. Oracle
Product Oracle
User ID IMEDIA
Password IMEDIA
9. Oracle
Product Oracle
User ID FROSTY
Password SNOWMAN
10. Oracle
Product Oracle
User ID ESTOREUSER
Password ESTORE
11. Oracle
Product Oracle
User ID EJSADMIN
Password EJSADMIN
12. Oracle
Product Oracle
User ID DES
Password DES
13. Oracle
Product Oracle
User ID DBI
Password MUMBLEFRATZ
14. Oracle
Product Oracle
User ID CQSCHEMAUSER
Password PASSWORD
15. Oracle
Product Oracle
User ID COMPIERE
Password COMPIERE
16. Oracle
Product Oracle
User ID ADMIN
Password WELCOME
Level Administrator
17. Oracle
Product Oracle
User ID CISINFO
Password CISINFO
18. Oracle
Product Oracle
User ID CIS
Password CIS
19. Oracle
Product Oracle
User ID CIDS
Password CIDS
20. Oracle
Product Oracle
User ID BC4J
Password BC4J
21. Oracle
Product Oracle
User ID AQ
Password AQ
22. Oracle
Product Oracle
User ID CENTRA
Password CENTRA
23. Oracle
Product Oracle
User ID ADMIN
Password JETSPEED
24. Oracle
Product Oracle
User ID ADAMS
Password WOOD
25. Oracle
Product Oracle
User ID ADLDEMO
Password ADLDEMO
26. Oracle
Product Oracle
User ID APPLSYS
Password FND
27. Oracle
Product Oracle
User ID APPLSYSPUB
Password FNDPUB
28. Oracle
Product Oracle
User ID APPS
Password APPS
29. Oracle
Product Oracle
User ID AQDEMO
Password AQDEMO
30. Oracle
Product Oracle
User ID AQJAVA
Password AQJAVA
31. Oracle
Product Oracle
User ID AQUSER
Password AQUSER
32. Oracle
Product Oracle
User ID AUDIOUSER
Password AUDIOUSER
33. Oracle
Product Oracle
User ID AURORA$JIS$UTILITY$
Password (none)
34. Oracle
Product Oracle
User ID AURORA$ORB$UNAUTHENTICATED
Password INVALID
35. Oracle
Product Oracle
User ID BLAKE
Password PAPER
36. Oracle
Product Oracle
User ID CATALOG
Password CATALOG
37. Oracle
Product Oracle
User ID CDEMO82
Password CDEMO82
38. Oracle
Product Oracle
User ID CDEMORID
Password CDEMORID
39. Oracle
Product Oracle
User ID CDEMOUCB
Password CDEMOUCB
40. Oracle
Product Oracle
User ID CLARK
Password CLOTH
41. Oracle
Product Oracle
User ID COMPANY
Password COMPANY
Notes All Privs
42. Oracle
Product Oracle
User ID CSMIG
Password CSMIG
43. Oracle
Product Oracle
User ID CTXDEMO
Password CTXDEMO
44. Oracle
Product Oracle
User ID CTXSYS
Password CTXSYS
45. Oracle
Product Oracle
User ID DBSNMP
Password DBSNMP
46. Oracle
Product Oracle
User ID MDSYS
Password MDSYS
Notes All Privileges with Admin
47. Oracle
Product Oracle
User ID DEMO9
Password DEMO9
48. Oracle
Product Oracle
User ID EMP
Password EMP
49. Oracle
Product Oracle
User ID EVENT
Password EVENT
50. Oracle
Product Oracle
User ID FINANCE
Password FINANCE
51. Oracle
Product Oracle
User ID FND
Password FND
52. Oracle
Product Oracle
User ID GPLD
Password GPLD
53. Oracle
Product Oracle
User ID GPFD
Password GPFD
54. Oracle
Product Oracle
User ID HLW
Password HLW
55. Oracle
Product Oracle
User ID HR
Password HR
56. Oracle
Product Oracle
User ID IMAGEUSER
Password IMAGEUSER
57. Oracle
Product Oracle
User ID JMUSER
Password JMUSER
58. Oracle
Product Oracle
User ID JONES
Password STEEL
59. Oracle
Product Oracle
User ID MFG
Password MFG
Notes All Privs
60. Oracle
Product Oracle
User ID MIGRATE
Password MIGRATE
61. Oracle
Product Oracle
User ID MILLER
Password MILLER
62. Oracle
Product Oracle
User ID MMO2
Password MMO2
63. Oracle
Product Oracle
User ID MOREAU
Password MOREAU
64. Oracle
Product Oracle
User ID MODTEST
Password YES
65. Oracle
Product Oracle
User ID MTSSYS
Password MTSSYS
66. Oracle
Product Oracle
User ID NAMES
Password NAMES
67. Oracle
Product Oracle
User ID OCITEST
Password OCITEST
68. Oracle
Product Oracle
User ID ODS
Password ODS
69. Oracle
Product Oracle
User ID OE
Password OE
70. Oracle
Product Oracle
User ID OLAPDBA
Password OLAPDBA
71. Oracle
Product Oracle
User ID PM
Password PM
72. Oracle
Product Oracle
User ID OLAPSVR
Password INSTANCE
73. Oracle
Product Oracle
User ID OLAPSYS
Password MANAGER
74. Oracle
Product Oracle
User ID ORACACHE
Password (random password)
75. Oracle
Product Oracle
User ID ORDPLUGINS
Password ORDPLUGINS
76. Oracle
Product Oracle
User ID ORDSYS
Password ORDSYS
77. Oracle
Product Oracle
User ID OSE$HTTP$ADMIN
Password (random password)
78. Oracle
Product Oracle
User ID OUTLN
Password OUTLN
79. Oracle
Product Oracle
User ID PERFSTAT
Password PERFSTAT
80. Oracle
Product Oracle
User ID PO
Password PO
Notes DBA
81. Oracle
Product Oracle
User ID PO7
Password PO7
82. Oracle
Product Oracle
User ID PORTAL30
Password PORTAL31
83. Oracle
Product Oracle
User ID PORTAL30_DEMO
Password PORTAL30_DEMO
84. Oracle
Product Oracle
User ID PORTAL30_PUBLIC
Password PORTAL30_PUBLIC
85. Oracle
Product Oracle
User ID PORTAL30_SSO
Password PORTAL30_SSO
86. Oracle
Product Oracle
User ID PORTAL30_SSO_PS
Password PORTAL30_SSO_PS
87. Oracle
Product Oracle
User ID PORTAL30_SSO_PUBLIC
Password PORTAL30_SSO_PUBLIC
88. Oracle
Product Oracle
User ID POWERCARTUSER
Password POWERCARTUSER
89. Oracle
Product Oracle
User ID PRIMARY
Password PRIMARY
90. Oracle
Product Oracle
User ID PUBSUB
Password PUBSUB
Notes DBA
91. Oracle
Product Oracle
User ID QS
Password QS
92. Oracle
Product Oracle
User ID QS_ADM
Password QS_ADM
93. Oracle
Product Oracle
User ID QS_CB
Password QS_CB
94. Oracle
Product Oracle
User ID QS_CBADM
Password QS_CBADM
95. Oracle
Product Oracle
User ID QS_CS
Password QS_CS
96. Oracle
Product Oracle
User ID QS_ES
Password QS_ES
97. Oracle
Product Oracle
User ID QS_OS
Password QS_OS
98. Oracle
Product Oracle
User ID QS_WS
Password QS_WS
99. Oracle
Product Oracle
User ID RE
Password RE
100. Oracle
Product Oracle
User ID REPADMIN
Password REPADMIN
101. Oracle
Product Oracle
User ID RMAIL
Password RMAIL
102. Oracle
Product Oracle
User ID RMAN
Password RMAN
103. Oracle
Product Oracle
User ID SAMPLE
Password SAMPLE
Notes DBA
104. Oracle
Product Oracle
User ID SECDEMO
Password SECDEMO
105. Oracle
Product Oracle
User ID SH
Password SH
106. Oracle
Product Oracle
User ID SYSADM
Password SYSADM
107. Oracle
Product Oracle
User ID TRACESVR
Password TRACE
108. Oracle
Product Oracle
User ID TSDEV
Password TSDEV
109. Oracle
Product Oracle
User ID TSUSER
Password TSUSER
110. Oracle
Product Oracle
User ID USER0
Password USER0
111. Oracle
Product Oracle
User ID USER1
Password USER1
112. Oracle
Product Oracle
User ID USER2
Password USER2
113. Oracle
Product Oracle
User ID USER3
Password USER3
114. Oracle
Product Oracle
User ID USER4
Password USER4
115. Oracle
Product Oracle
User ID USER5
Password USER5
116. Oracle
Product Oracle
User ID USER6
Password USER6
117. Oracle
Product Oracle
User ID USER7
Password USER7
118. Oracle
Product Oracle
User ID USER8
Password USER8
119. Oracle
Product Oracle
User ID USER9
Password USER9
120. Oracle
Product Oracle
User ID UTLBSTATU
Password UTLESTAT
121. Oracle
Product Oracle
User ID VIDEOUSER
Password VIDEO USER
122. Oracle
Product Oracle
User ID VIF_DEVELOPER
Password VIF_DEV_PWD
123. Oracle
Product Oracle
User ID VIRUSER
Password VIRUSER
124. Oracle
Product Oracle
User ID VRR1
Password VRR1
125. Oracle
Product Oracle
User ID WKSYS
Password WKSYS
126. Oracle
Product Oracle
User ID CTXSYS
Password (none)
127. Oracle
Product Oracle
User ID DEMO8
Password DEMO8
128. Oracle
Product Oracle
User ID CDEMOCOR
Password CDEMOCOR
129. Oracle
Product Oracle
User ID ODSCOMMON
Password ODSCOMMON
130. Oracle
Product Oracle
User ID OEMADM
Password OEMADM
131. Oracle
Product Oracle
User ID OMWB_EMULATION
Password ORACLE
132. Oracle
Product Oracle
User ID OPENSPIRIT
Password OPENSPIRIT
133. Oracle
Product Oracle
User ID ORAREGSYS
Password ORAREGSYS
134. Oracle
Product Oracle
User ID OSP22
Password OSP22
135. Oracle
Product Oracle
User ID OWA
Password OWA
136. Oracle
Product Oracle
User ID OWA_PUBLIC
Password OWA_PUBLIC
137. Oracle
Product Oracle
User ID PANAMA
Password PANAMA
138. Oracle
Product Oracle
User ID PATROL
Password PATROL
139. Oracle
Product Oracle
User ID PLSQL
Password SUPERSECRET
140. Oracle
Product Oracle
User ID REP_MANAGER
Password DEMO
141. Oracle
Product Oracle
User ID REP_OWNER
Password DEMO
142. Oracle
Product Oracle
User ID REP_OWNER
Password REP_OWNER
143. Oracle
Product Oracle
User ID SAP
Password SAPR3
144. Oracle
Product Oracle
User ID SDOS_ICSAP
Password SDOS_ICSAP
145. Oracle
Product Oracle
User ID SITEMINDER
Password SITEMINDER
146. Oracle
Product Oracle
User ID SLIDE
Password SLIDEPW
147. Oracle
Product Oracle
User ID STARTER
Password STARTER
148. Oracle
Product Oracle
User ID STRAT_USER
Password STRAT_PASSWD
149. Oracle
Product Oracle
User ID SWPRO
Password SWPRO
150. Oracle
Product Oracle
User ID SWUSER
Password SWUSER
151. Oracle
Product Oracle
User ID SYMPA
Password SYMPA
152. Oracle
Product Oracle
User ID SYSMAN
Password OEM_TEMP
153. Oracle
Product Oracle
User ID TAHITI
Password TAHITI
154. Oracle
Product Oracle
User ID TDOS_ICSAP
Password TDOS_ICSAP
155. Oracle
Product Oracle
User ID TESTPILOT
Password TESTPILOT
156. Oracle
Product Oracle
User ID TRAVEL
Password TRAVEL
157. Oracle
Product Oracle
User ID TURBINE
Password TURBINE
158. Oracle
Product Oracle
User ID ULTIMATE
Password ULTIMATE
159. Oracle
Product Oracle
User ID USER
Password USER
160. Oracle
Product Oracle
User ID WEBCAL01
Password WEBCAL01
161. Oracle
Product Oracle
User ID WEBDB
Password WEBDB
162. Oracle
Product Oracle
User ID WEBREAD
Password WEBREAD
163. Oracle
Product Oracle
User ID WWW
Password WWW
164. Oracle
Product Oracle
User ID WWWUSER
Password WWWUSER
165. Oracle
Product Oracle
User ID XPRT
Password XPRT
166. Oracle
Product Oracle
User ID ADMINISTRATOR
Password ADMINISTRATOR
Level Administrator
167. Oracle
Product Oracle
User ID ADMINISTRATOR
Password admin
Level Administrator
168. Oracle
Product Oracle
User ID ANDY
Password SWORDFISH
169. Oracle
Product Oracle
User ID AP
Password AP
170. Oracle
Product Oracle
User ID APPUSER
Password APPUSER
171. Oracle
Product Oracle
User ID BRIO_ADMIN
Password BRIO_ADMIN
172. Oracle
Product Oracle
User ID DEV2000_DEMOS
Password DEV2000_DEMOS
173. Oracle
Product Oracle
User ID DISCOVERER_ADMIN
Password DISCOVERER_ADMIN
174. Oracle
Product Oracle
User ID DSGATEWAY
Password DSGATEWAY
175. Oracle
Product Oracle
User ID DSSYS
Password DSSYS
176. Oracle
Product Oracle
User ID GL
Password GL
177. Oracle
Product Oracle
User ID HCPARK
Password HCPARK
178. Oracle
Product Oracle
User ID JWARD
Password AIROPLANE
179. Oracle
Product Oracle
User ID L2LDEMO
Password L2LDEMO
180. Oracle
Product Oracle
User ID MDDEMO
Password MDDEMO
181. Oracle
Product Oracle
User ID MDDEMO_CLERK
Password CLERK
182. Oracle
Product Oracle
User ID MDDEMO_MGR
Password MGR
183. Oracle
Product Oracle
User ID MGWUSER
Password MGWUSER
184. Oracle
Product Oracle
User ID ODM
Password ODM
185. Oracle
Product Oracle
User ID ODM_MTR
Password MTRPW
186. Oracle
Product Oracle
User ID OEMREP
Password OEMREP
187. Oracle
Product Oracle
User ID OO
Password OO
188. Oracle
Product Oracle
User ID ORASSO
Password ORASSO
189. Oracle
Product Oracle
User ID OWNER
Password OWNER
190. Oracle
Product Oracle
User ID PLEX
Password PLEX
191. Oracle
Product Oracle
User ID PORTAL30
Password PORTAL30
192. Oracle
Product Oracle
User ID PUBSUB1
Password PUBSUB1
193. Oracle
Product Oracle
User ID QDBA
Password QDBA
194. Oracle
Product Oracle
User ID REPORTS_USER
Password OEM_TEMP
195. Oracle
Product Oracle
User ID SERVICECONSUMER1
Password SERVICECONSUMER1
196. Oracle
Product Oracle
User ID SYS
Password D_SYSPW
197. Oracle
Product Oracle
User ID SYSTEM
Password D_SYSTPW
198. Oracle
Product Oracle
User ID internal
Password oracle
199. Oracle
Product Oracle
User ID scott
Password tiger or tigger
200. Oracle
Product Oracle
User ID system
Password manager
201. Oracle
Product Oracle
User ID sys
Password change_on_install
202. Oracle
Product Oracle
User ID demo
Password demo
203. Oracle
Product Oracle
User ID oracle
Password oracle
204. Oracle
Product Oracle
User ID sys
Password sys
205. Oracle
Product Personal Oracle
Version 8
Method Multi
User ID PO8
Password PO8
206. Oracle
Product Oracle
User ID DIP
Password DIP
207. Oracle
Product Oracle
User ID EXFSYS
Password EXFSYS
208. Oracle
Product Database
Version OC4J 10g (10.1.3) Developer Preview
User ID admin
Password welcome
209. Oracle
Product Oracle BPEL Process Manager
User ID bpel
Password bpel
Поиск по этому блогу
понедельник, марта 30, 2009
Инструкция по применению LOGMINER c www.cyberguru.ru
Анализ журнала с помощью LogMiner
Архивные файлы журналов повторов очень важны, особенно для восстановления БД. Для того, чтобы прочитать внесенные в БД изменения, которые содержаться в архивном файле журнала повторов, необходимо открыть указанный файл и изучить его содержимое.
Для этого существует специальный инструмент под названием LogMiner.
Для работы с этим инструментом необходимо:
1. Установить utl_file_dir в init.ora
2. Запустить $ORACLE_HOME/rdbms/admin/dbmslogmnrd.sql
3. SQL> EXECUTE dbms_logmnr_d.build('dictionary.ora', '');
4. SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName => ' /oradata/test/arc/test454.arc', Options => dbms_logmnr.NEW);
для каждого добавляемого к списку файла журнала удалить
DBMS_LOGMNR.REMOVEFILE
5. EXECUTE DBMS_LOGMNR.START_LOGMNR(DictFileName =>/dictionary.ora');
6. select scn, log_id, username, sql_redo, sql_undo from v$logmnr_contents where username='SCOTT';
список всех изменений, выполненных пользователем SCOTT
7. SQL> EXEC DBMS_LOGMNR.END_LOGMNR;
Архивные файлы журналов повторов очень важны, особенно для восстановления БД. Для того, чтобы прочитать внесенные в БД изменения, которые содержаться в архивном файле журнала повторов, необходимо открыть указанный файл и изучить его содержимое.
Для этого существует специальный инструмент под названием LogMiner.
Для работы с этим инструментом необходимо:
1. Установить utl_file_dir в init.ora
2. Запустить $ORACLE_HOME/rdbms/admin/dbmslogmnrd.sql
3. SQL> EXECUTE dbms_logmnr_d.build('dictionary.ora', '
4. SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName => ' /oradata/test/arc/test454.arc', Options => dbms_logmnr.NEW);
для каждого добавляемого к списку файла журнала удалить
DBMS_LOGMNR.REMOVEFILE
5. EXECUTE DBMS_LOGMNR.START_LOGMNR(DictFileName =>
6. select scn, log_id, username, sql_redo, sql_undo from v$logmnr_contents where username='SCOTT';
список всех изменений, выполненных пользователем SCOTT
7. SQL> EXEC DBMS_LOGMNR.END_LOGMNR;
среда, марта 25, 2009
Работаем с TIMESTAMP
Второй вариант действий против шаловливых ручек. Без указания на то у кого растут оные.
Нам надо вернуть данные удаленные недавно. Делаем запрос к таблице у которой удалили данные добавив AS OF TIMESTAMP и указываем время когда данные еще были в таблице. Луччше при этом создать таблицу клон.
1)
-SELECT account_number FROM account AS OF TIMESTAMP TO_TIMESTAMP('2009-02-25 12:08:00', 'YYYY-MM-DD HH:MI:SS');
2)
-create table ows.account_backup as
(SELECT * FROM account AS OF TIMESTAMP TO_TIMESTAMP('2009-02-25 12:08:00', 'YYYY-MM-DD HH:MI:SS'));
Теперь момент с удалением пакета. Сам не проверял, но увидел в инете мысль как получить удаленный пакет.
-SELECT text FROM dba_source AS OF TIMESTAMP
TO_TIMESTAMP('2008-12-10 15:00:00', 'YYYY-MM-DD HH:MI:SS')
WHERE name = '<Ваш пакет>' and type in ('PACKAGE BODY','PACKAGE') order by type, line;
Нам надо вернуть данные удаленные недавно. Делаем запрос к таблице у которой удалили данные добавив AS OF TIMESTAMP и указываем время когда данные еще были в таблице. Луччше при этом создать таблицу клон.
1)
-SELECT account_number FROM account AS OF TIMESTAMP TO_TIMESTAMP('2009-02-25 12:08:00', 'YYYY-MM-DD HH:MI:SS');
2)
-create table ows.account_backup as
(SELECT * FROM account AS OF TIMESTAMP TO_TIMESTAMP('2009-02-25 12:08:00', 'YYYY-MM-DD HH:MI:SS'));
Теперь момент с удалением пакета. Сам не проверял, но увидел в инете мысль как получить удаленный пакет.
-SELECT text FROM dba_source AS OF TIMESTAMP
TO_TIMESTAMP('2008-12-10 15:00:00', 'YYYY-MM-DD HH:MI:SS')
WHERE name = '<Ваш пакет>' and type in ('PACKAGE BODY','PACKAGE') order by type, line;
Свой опыт работы с LOGMINER
Кто-то с шаловливыми ручками скажем удалил данные или таблицу. Причем совсем недавно. Наша задача во-первых найти то что было удалено и вернуть на родину, а во вторых указать на этого нехорошего дядю с большими ушами.
Чтобы указать на дядю нам следует отработать скрипт. До того как дядя удалит чего-нибудь.
-ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
После того как дядя поработал ручками, мы должны скоренько подгрузить логи в таблицу. Потом можем свободно смотреть что и как делалось.
-SELECT distinct member LOGFILENAME FROM V$LOGFILE;
-BEGIN
DBMS_LOGMNR.ADD_LOGFILE('/u6/test/log1/redo01.log');
DBMS_LOGMNR.ADD_LOGFILE('/u6/test/log1/redo02.log');
DBMS_LOGMNR.ADD_LOGFILE('/u6/test/log1/redo03.log');
END;
-BEGIN
DBMS_LOGMNR.START_LOGMNR(options =>dbms_logmnr.dict_from_online_catalog);
END;
-select /*to_char(timestamp,'mm/dd/yy hh24:mi:ss') timestamp,*/ *
from v$logmnr_contents
where table_name = 'ACCOUNT'
and operation = 'UPDATE'
and '02/25/2009 15:14' =to_char(timestamp,'mm/dd/yyyy hh24:mi');
Чтобы указать на дядю нам следует отработать скрипт. До того как дядя удалит чего-нибудь.
-ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
После того как дядя поработал ручками, мы должны скоренько подгрузить логи в таблицу. Потом можем свободно смотреть что и как делалось.
-SELECT distinct member LOGFILENAME FROM V$LOGFILE;
-BEGIN
DBMS_LOGMNR.ADD_LOGFILE('/u6/test/log1/redo01.log');
DBMS_LOGMNR.ADD_LOGFILE('/u6/test/log1/redo02.log');
DBMS_LOGMNR.ADD_LOGFILE('/u6/test/log1/redo03.log');
END;
-BEGIN
DBMS_LOGMNR.START_LOGMNR(options =>dbms_logmnr.dict_from_online_catalog);
END;
-select /*to_char(timestamp,'mm/dd/yy hh24:mi:ss') timestamp,*/ *
from v$logmnr_contents
where table_name = 'ACCOUNT'
and operation = 'UPDATE'
and '02/25/2009 15:14' =to_char(timestamp,'mm/dd/yyyy hh24:mi');
Увидел статейку о LOGMINER. Перенес себе.
--1)
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
--2)Построить словарь:
execute dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_logs);
--3) Определяем лог в котором находится словарь
col name_dict new_val v_name_dict
SELECT
name name_dict
FROM
V$ARCHIVED_LOG
WHERE
sequence# = (select max(sequence#) from V$ARCHIVED_LOG where dictionary_begin='YES')
;
col member format a60 new_val v_member
select
f.member
from
v$log l,
v$logfile f
where
l.group# = f.group# and
l.status = 'CURRENT'
;
--4) На этом этапе производятся изменения в БД, в структуре таблиц
--5) Теперь работаем
alter system switch logfile;
-- Включаем те в котором находится определение словар
execute dbms_logmnr.add_logfile(logfilename=>'&&v_name_dict',options=>dbms_logmnr.new);
execute dbms_logmnr.add_logfile(logfilename=>'&&v_member',options=>dbms_logmnr.addfile);
--!!! Для трэкинга может понадобиться включение последующих логов, кроме тех что выше
execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_redo_logs+dbms_logmnr.ddl_dict_tracking);
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
--2)Построить словарь:
execute dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_logs);
--3) Определяем лог в котором находится словарь
col name_dict new_val v_name_dict
SELECT
name name_dict
FROM
V$ARCHIVED_LOG
WHERE
sequence# = (select max(sequence#) from V$ARCHIVED_LOG where dictionary_begin='YES')
;
col member format a60 new_val v_member
select
f.member
from
v$log l,
v$logfile f
where
l.group# = f.group# and
l.status = 'CURRENT'
;
--4) На этом этапе производятся изменения в БД, в структуре таблиц
--5) Теперь работаем
alter system switch logfile;
-- Включаем те в котором находится определение словар
execute dbms_logmnr.add_logfile(logfilename=>'&&v_name_dict',options=>dbms_logmnr.new);
execute dbms_logmnr.add_logfile(logfilename=>'&&v_member',options=>dbms_logmnr.addfile);
--!!! Для трэкинга может понадобиться включение последующих логов, кроме тех что выше
execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_redo_logs+dbms_logmnr.ddl_dict_tracking);
вторник, марта 24, 2009
Restore with RMAN
Помалеху готовимся к судному дню. Строим ковчег. :)
Как обычно использовал vmware, red hat, Oracle 10. Программа строит скрипт для восстановления файлов в другую папочку. Если будет другой комп, а все ради этого и затевалось, нам еще нужен файл init.ora, настроенный листенер и TNS. Може чего и забыл.
Запускаем на боевой базе в sqlplus следующий скрипт, предварительно обработав его грубым рашпилем. Делаем это до падения базы :)
set serveroutput on
set trimspool on
set line 500
set head off
set feed off
spool /home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/pfile/restore.log
declare
begin
dbms_output.put_line('run ');
dbms_output.put_line('{');
dbms_output.put_line('allocate channel c1 device type disk; ');
dbms_output.put_line('restore controlfile to ''/home/oracle/oracle/product/10.2.0/oradata/stpahom/rest.ctl'' from autobackup;');
dbms_output.put_line('release channel c1; ');
dbms_output.put_line('}');
dbms_output.put_line('alter database mount;');
dbms_output.put_line('run ');
dbms_output.put_line('{');
dbms_output.put_line(' allocate channel c1 device type disk;');
for c1 in (select name from v$datafile)
loop
dbms_output.put_line('set newname for datafile '''||c1.name||''' to '''||c1.name||''';');
end loop;
dbms_output.put_line(' restore database;');
dbms_output.put_line(' restore archivelog all;');
dbms_output.put_line('switch datafile all;');
dbms_output.put_line(' recover database;');
dbms_output.put_line(' alter database open resetlogs;');
dbms_output.put_line(' release channel c1;');
dbms_output.put_line('}');
end;
/
spool off
set head on
set feed on
set serveroutput off
У меня получилось:
run
{
allocate channel c1 device type disk;
restore controlfile to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/rest.ctl' from autobackup;
release channel c1;
}
alter database mount;
run
{
allocate channel c1 device type disk;
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/system01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/system01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/undotbs01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/undotbs01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/sysaux01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/sysaux01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/users01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/users01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/example01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/example01.dbf';
restore database;
restore archivelog all;
switch datafile all;
recover database;
alter database open resetlogs;
release channel c1;
}
Ну и наконец все это запускаем в RMAN. Где-то вот так
RMAN> $ORACLE_HOME/bin/rman target / cmdfile=/home//home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/pfile/restore.log;
Грубый рашпиль никто не отменял. Например вот здесь
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/system01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/system01.dbf';
Выделенное пухленьким следует менять. Так как мы хотим другую папку, а у этой команды пути одинаковые. При восстановлении БД в режиме NOMOUNT.
Как обычно использовал vmware, red hat, Oracle 10. Программа строит скрипт для восстановления файлов в другую папочку. Если будет другой комп, а все ради этого и затевалось, нам еще нужен файл init.ora, настроенный листенер и TNS. Може чего и забыл.
Запускаем на боевой базе в sqlplus следующий скрипт, предварительно обработав его грубым рашпилем. Делаем это до падения базы :)
set serveroutput on
set trimspool on
set line 500
set head off
set feed off
spool /home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/pfile/restore.log
declare
begin
dbms_output.put_line('run ');
dbms_output.put_line('{');
dbms_output.put_line('allocate channel c1 device type disk; ');
dbms_output.put_line('restore controlfile to ''/home/oracle/oracle/product/10.2.0/oradata/stpahom/rest.ctl'' from autobackup;');
dbms_output.put_line('release channel c1; ');
dbms_output.put_line('}');
dbms_output.put_line('alter database mount;');
dbms_output.put_line('run ');
dbms_output.put_line('{');
dbms_output.put_line(' allocate channel c1 device type disk;');
for c1 in (select name from v$datafile)
loop
dbms_output.put_line('set newname for datafile '''||c1.name||''' to '''||c1.name||''';');
end loop;
dbms_output.put_line(' restore database;');
dbms_output.put_line(' restore archivelog all;');
dbms_output.put_line('switch datafile all;');
dbms_output.put_line(' recover database;');
dbms_output.put_line(' alter database open resetlogs;');
dbms_output.put_line(' release channel c1;');
dbms_output.put_line('}');
end;
/
spool off
set head on
set feed on
set serveroutput off
У меня получилось:
run
{
allocate channel c1 device type disk;
restore controlfile to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/rest.ctl' from autobackup;
release channel c1;
}
alter database mount;
run
{
allocate channel c1 device type disk;
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/system01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/system01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/undotbs01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/undotbs01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/sysaux01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/sysaux01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/users01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/users01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/example01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/example01.dbf';
restore database;
restore archivelog all;
switch datafile all;
recover database;
alter database open resetlogs;
release channel c1;
}
Ну и наконец все это запускаем в RMAN. Где-то вот так
RMAN> $ORACLE_HOME/bin/rman target / cmdfile=/home//home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/pfile/restore.log;
Грубый рашпиль никто не отменял. Например вот здесь
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/system01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/system01.dbf';
Выделенное пухленьким следует менять. Так как мы хотим другую папку, а у этой команды пути одинаковые. При восстановлении БД в режиме NOMOUNT.
пятница, марта 20, 2009
Цацка ereader v3
Купил себе цацку. В наше тяжелое время помогает экономить. Читает практически все, на устройстве может лежать в архиве. Вопчем чего и вам желаю.
четверг, марта 19, 2009
Очистка компа от Oracle.
Ну не удаляет uninstall его полностью. Поєтому ручками ...
Звиняйте на аглицком. Но там и без перевода понятно.
Ensure you are logged in as a user with Administrator privileges.
Using regedit (at the command prompt, type regedit), go to HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE and delete the ORACLE key.
Delete HKEY_LOCAL_MACHINE\SOFTWARE\odbc.
Open HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, and remove all keys under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services that begin with ORACLE.
Open HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application, and remove all keys under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application that begin with ORACLE.
Open HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\oracle.....
Close regedit.
From the Control Panel, open System.
If JRE was installed by Oracle, remove the %ORACLE_HOME%\BIN path and the JRE path. For example, you may see a path similar to this one: C: \ORACLE\ORA81\BIN;G: \Program Files\Oracle\jre\1.1.7\bin. Go to Start > Control Panel > System > Environment tab. Click on the system variable path and modify the path.
Delete Icons from: \Winnt\Profiles\All Users\Start Menu\Programs\Oracle - and : \Winnt\Profiles\All Users\Start Menu\Programs\Oracle Installation Products. Where is the previous HOME name.
Delete: \Program Files\Oracle (from the Windows NT Explorer or from the command prompt).
Reboot your computer.
Delete all ORACLE_BASE directories (You can find the Oracle homes listed in HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ORACLE_HOMES).
Звиняйте на аглицком. Но там и без перевода понятно.
Ensure you are logged in as a user with Administrator privileges.
Using regedit (at the command prompt, type regedit), go to HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE and delete the ORACLE key.
Delete HKEY_LOCAL_MACHINE\SOFTWARE\odbc.
Open HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, and remove all keys under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services that begin with ORACLE.
Open HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application, and remove all keys under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application that begin with ORACLE.
Open HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\oracle.....
Close regedit.
From the Control Panel, open System.
If JRE was installed by Oracle, remove the %ORACLE_HOME%\BIN path and the JRE path. For example, you may see a path similar to this one: C: \ORACLE\ORA81\BIN;G: \Program Files\Oracle\jre\1.1.7\bin. Go to Start > Control Panel > System > Environment tab. Click on the system variable path and modify the path.
Delete Icons from
Delete
Reboot your computer.
Delete all ORACLE_BASE directories (You can find the Oracle homes listed in HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ORACLE_HOMES).
Как организовать горячий резерв БД
Как организовать горячий резерв БД
Владимир Пржиялковский,
координатор Евро-Азиатской Группы Пользователей Oracle,
преподаватель УКЦ Interface Ltd.
В некоторых информационных системах требуется обеспечить бесперебойный доступ к БД невзирая на всевозможные сбои и отказы оборудования и программ. Задача придать системе "высокую степень доступности" не имеет единственного решения в ИТ, а вместо этого имеет гамму разных решений, каждое со своими выгодами и ограничениями. Многие из таких решений реализованы и в Oracle рядом специальных конфигураций системы СУБД-БД. Одно из самых доступных - организация "горячего резерва". В Oracle для обозначения горячего резерва используется термин "standby".
Основные принципы горячего резервирования
В общем, принципы организации горячего резерва в Oracle довольно просты:
(1) Организуются две активные БД: одна основная, и другая резервная.
(2) Основная БД работает в режиме архивирования журналов. На возможность подсоединения к ней и на работу с данными никаких ограничений не накладывается.
(3) Резервная БД работает в специальном режиме постоянного восстановления с архивированных журналов, получаемых от основной БД; она все время "догоняет" основную.
(4) Из этого специального режима резервную БД можно перевести в другой, когда она приостановит процедуру восстановления и сможет предоставить свои данные, однако только для чтения. Из этого второго режима мы может вернуться в первый, для нее основной.
(5) Кроме этого, из режима восстановления резервную БД можно перевести в режим обычной полнофункциональной БД, но теперь уже безвозвратно.
Техника "standby" существует в Oracle давно, и в деталях реализации претерпела за прошедшее время несколько изменений. Ниже она будет описана по состоянию для версии 9.0.
Что дает пример ниже
Техника горячего резервирования описана в документации по Oracle. Однако давно замечено (интересно, что и в фирме об этом знают!), что эта документация, за исключением избранных мест, не может служить толковым учебником. К горячему резервированию это относится в полной мере.
С другой стороны есть целый ряд статей, где методично рассказано, как организовать standby database. Однако они все или относятся к Unix, и/или содержат ошибки - по крайней мере те, что попадались мне на глаза.
Пример организации резервного копирования ниже
а) относится к платформе Windows, то есть наиболее демократичен в смысле аудитории
б) не требует наличия второй машины (что, в общем, бестолково для реальной практики, но вполне нормально, и даже удобно, для знакомства)
в) не содержит ошибок.
Пользователи на платформе Unix, как правило, более продвинутые, без особого труда внесут в приводимый пример необходимые правки.
Постановка задачи и план решения
Пусть имеется БД teacher.class (использовано глобальное именование БД). Создадим для нее резервную БД с именем sb.class (имя sb часто используется в таких примерах, но это - чистая условность). Она будет работать на той же машине, что и teacher.class. Расположения каталогов будем считать OFA-удовлетворительным.
Для teacher.class должна иметься копия БД (проще, если холодная) и должен быть включен режим архивации. Если этого нет, перед выполнением примера нужно об этом позаботиться.
Вот, для определенности, выдержка из файла INIT.ORA для teacher.class в исходном состоянии:
background_dump_dest=d:\oracle\admin\teacher\bdump
core_dump_dest=d:\oracle\admin\teacher\cdump
user_dump_dest=d:\oracle\admin\teacher\udump
db_domain="class"
global_names = true
remote_login_passwordfile=EXCLUSIVE
compatible=9.0.0
db_name=teacher
instance_name=teacher
##################################
log_archive_start = true
log_archive_dest = "e:\oracle\oradata\teacher\archive"
log_archive_format = teachers%s.arc
План нижеприводимого решения включает следующие действия:
1. Подготовка основной БД к работе в спарке с резервной
2. Клонирование основной БД и формирование из полученного клона резервной БД
3. Конфигурирование сетевых компонент Oracle Net для возможности общения двух БД друг с другом
4. Запуск резервной БД в рабочем режиме
Подготовка места для резервной БД
Сначала резервная БД создается клонированием основной, затем мы "вдохнем в нее жизнь" и запустим в режиме восстановления. Поэтому прежде всего для sb.class нужно подготовить место на диске.
В нашем примере это каталог d:\oracle\admin\sb с подкаталогами udump, bdump, cdump и pfile, а также c:\oracle\oradata\sb - их нужно завести.
Еще не забудем завести каталог e:\oracle\oradata\sb\archive для хранения собственных архивов sb.class (на будущее, когда эту базу переведут в основной режим) и каталог e:\oracle\oradata\sb\teacher_archive для приема архивов от teacher.class.
Готовим основную БД
Подправим INIT.ORA для teacher.class:
background_dump_dest=d:\oracle\admin\teacher\bdump
core_dump_dest=d:\oracle\admin\teacher\cdump
user_dump_dest=d:\oracle\admin\teacher\udump
db_domain="class"
global_names = true
remote_login_passwordfile=EXCLUSIVE
control_files=("c:\oracle\oradata\teacher\control01.ctl")
compatible=9.0.0
db_name=teacher
instance_name=teacher
##################################
log_archive_start = true
#####log_archive_dest = "e:\oracle\oradata\teacher\archive"
log_archive_dest_1 = "location=e:\oracle\oradata\teacher\archive"
log_archive_format = teachers%s.arc
log_archive_dest_state_1 = enable
log_archive_dest_2 = "service=sb.class"
log_archive_dest_state_2 = enable
log_archive_min_succeed_dest = 1
fal_client = "sb.class"
Правкой затронута только нижняя часть, отделенная строкой из #.
Во-первых, от параметра LOG_ARCHIVE_DEST (сохраненному для совместимости) мы перешли к более современному LOG_ARCHIVE_DEST_1. Параметры LOG_ARCHIVE_DEST_N в последних версиях Oracle задают направления копирования освободившихся журналов в архив, а параметры LOG_ARCHIVE_DEST_STATE_N позволяют имеющиеся направления "включать" и временно "отключать".
В нашем случае к старому архиву e:\oracle\oradata\teacher\archive добавилось как раз еще одно такое направление, но уже не в виде каталога, как раньше, а в виде БД, которой teacher.class будет пересылать свои журналы.
Параметр FAL_CLIENT = "sb.class" уточняет, что это будет резервная БД sb.class и что пересылка будет автоматической.
Остановим основную БД и выдадим в SQL*Plus:
STARTUP PFILE=?/database/initteacher.ora
ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'c:\oracle\oradata\sb\control01.ctl';
ALTER SYSTEM ARCHIVE LOG CURRENT;
SHUTDOWN
То есть мы приготовили контрольный файл для резервной БД и зафиксировали точку отсчета для пересылки архивируемых журналов на sb.class.
Готовим клон для резервной БД
Копируем все файлы БД teacher.class, кроме контрольного, в c:\oracle\oradata\sb. Контрольный там уже есть.
Копируем INIT.ORA БД teacher.class в d:\oracle\admin\teacher\pfile. Правим его:
background_dump_dest=d:\oracle\admin\sb\bdump
core_dump_dest=d:\oracle\admin\sb\cdump
user_dump_dest=d:\oracle\admin\sb\udump
db_domain="class"
global_names = true
remote_login_passwordfile=EXCLUSIVE
control_files=("c:\oracle\oradata\sb\control01.ctl")
compatible=9.0.0
db_name=teacher
instance_name=sb
##################################
log_archive_format = teachers%s.arc
db_file_name_convert = "\ORADATA\TEACHER", "\ORADATA\SB"
log_file_name_convert = "\ORADATA\TEACHER", "\ORADATA\SB"
standby_archive_dest = "e:\oracle\oradata\sb\teacher_archive"
log_archive_dest = "e:\oracle\oradata\sb\archive"
lock_name_space = sb
fal_server = "teacher.class"
Обратите внимание на изменение имен каталогов и названий в верхней части текста, однако главные изменения расположены ниже строки-комментария.
Параметры DB_FILE_NAME_CONVERT и LOG_FILE_NAME_CONVERT нужны только если структуры каталогов основной и резервной БД не совпадают. В нашем случае, когда обе БД работают на одной машине, это неизбежно. Когда обе БД работают на разных машинах, проще использовать одинаковую структуру каталогов и об этих параметрах забыть.
Параметр STANDBY_ARCHIVE_DEST указывает на каталог, куда "принимающая сторона" sb.class будет складывать поступающие от teacher.class архивные копии журнала.
Параметр LOG_ARCHIVE_DEST задает каталог-архив уже для своих изменений sb.class (на будущее).
Параметр LOCK_NAME_SPACE нужен только в нашей не типичной для практики ситуации, когда обе БД будут работать на одной машине; без него две СУБД не смогут одновременно общаться с разными БД, имеющими одинаковые имена.
Наконец, параметр FAL_SERVER симметричен FAL_CLIENT в INIT-файле для teacher.class.
Копируем из e:\oracle\oradata\teacher\archive в e:\oracle\oradata\sb\teacher_archive последний по времени архивированный файл.
Обеспечиваем взаимодействие по Oracle Net
Нужно ненадолго отвлечься от резервной БД и подправить файлы listener.ora и tnsnames.ora, чтобы обе СУБД могли общаться. У нас будет автоматическая пересылка файлов на резервную БД (а могли бы этого не делать и переносить архивные файлы вручную, но это не очень интересно), и для этого основная база должна уметь соединяться с резервной. Нужные конфигурационные файлы у нас находятся в одном месте: в %oracle_home%\network\admin, а в "боевых условиях" они будут разнесены по разным машинам. Добавляем в listener.ora фрагмент:
(SID_LIST =
(оставить, как было)
(SID_DESC =
(GLOBAL_DBNAME = teacher.class)
(ORACLE_HOME = c:\oracle\ora90)
(SID_NAME = sb)
)
)
После этого listener надо перезапустить, проще всего - через окошко Services в ОС Windows, но можно и из командной строки.
В файл tnsnames.ora добавляем
sb.class =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = wsa46)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sb)
)
)
"Оживляем" резервную БД и запускаем ее
Теперь резервную БД нужно "оживить". Войдем в консольном окошке ОС в каталог %oracle_home%\database. Скопируем initteacher.ora в initsb.ora и подправим в initsb.ora ссылку на файл: IFILE='c:\oracle\admin\teacher\pfile\init.ora' заменим на IFILE='c:\oracle\admin\sb\pfile\init.ora'.
Создадим файл пароля для sb.class:
orapwd file=PWDsb.ora password=change_on_install
Заведем службу ОС для sb.class:
oradim -new -sid sb -startmode m -pfile c:\oracle\ora90\database\initsb.ora
"Приводим" резервную БД "в чувство" и переводим в режим автоматического подката по получаемым файлам журналов. Выдаем в SQL*Plus:
CONNECT sys/change_on_install AS SYSDBA
STARTUP MOUNT PFILE=?/database/initsb.ora
RECOVER MANAGED STANDBY DATABASE
В этом месте SQL*Plus "зависает", но так и должно быть. Уходим из этого окошка, но не закрываем его.
Проверка
Теперь можно для наглядности вывести на экран два окошка с содержимым каталогов e:\oracle\oradata\teacher\archive и e:\oracle\oradata\sb\teacher_archive соответственно.
Запускаем снова основную БД в окошке с SQL*Plus, где мы эту базу останавливали:
STARTUP PFILE=?/database/initteacher.ora
Выдадим несколько раз
ALTER SYSTEM SWITCH LOGFILE;
Если все было проделано без ошибок, в обоих окошках с каталогами можно наблюдать появление одних и тех же архивных копий журнала, причем с запаздыванием: сначала в одном, потом в другом. Это свидетельствует о том, что архивные копии реально пересылаются на резервную БД.
Еще для проверки можно запустить и процесс внесения в основную БД фактических изменений, в результате чего журнальные файлы начнут переключаться самостоятельно. Для нас результат должен быть тем же самым.
Перевод резервной БД в состояние, допускающее выборку
Откроем новое консольное окошко, где выдадим в SQL*Plus:
CONNECT sys/change_on_install@sb.class AS SYSDBA
RECOVER MANAGED STANDBY CANCEL
EXIT
Вернемся в прежнее окошко с резервной БД и увидим, что сеанс SQL*Plus в нем "отвис". Сейчас архивные копии продолжают поступать в резервную БД, однако сама база уже не подкатывается. Наберем
ALTER DATABASE OPEN READONLY;
Теперь из резервной базы можно делать выборки данных.
Возврат резервной БД в режим подката
В этом же последнем окошке набираем:
CONNECT sys/change_on_install AS SYSDBA
SHUTDOWN
STARTUP MOUNT PFILE=?/database/initsb.ora
RECOVER AUTOMATIC STANDBY DATABASE
CANCEL
RECOVER MANAGED STANDBY DATABASE
Как и прежде, тут мы "зависаем".
Перевод резервной БД в рабочее состояние
Вначале поступаем, как и прежде, а потом - иначе. В новом окошке выдадим в SQL*Plus:
CONNECT sys/change_on_install@sb.class AS SYSDBA
RECOVER MANAGED STANDBY CANCEL
ALTER DATABASE RECOVER STANDBY DATABASE;
ALTER DATABASE RECOVER CANCEL;
ALTER DATABASE ACTIVATE STANDBY DATABASE;
Теперь правильнее всего будет остановить бывшую резервную, а отныне - рабочую БД, снять с нее холодную копию, проделать необходимые правки в файлах Oracle Net и запустить базу снова и подготовить для нее новый резерв. После этого можно будет использовать ее в рабочем режиме.
Standby Database
" Primary Database Setup
" Standby Database Setup
" Standby Recovery
" Managed Standby Recovery
" Read Only Database
" Standby Database Backup
Primary Database Setup
" Shutdown the database using: SHUTDOWN IMMEDIATE
" Backup all database files.
" Add an entry for the standby server into the tnsnames.ora file:
STBY=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myServerName)(PORT = 1512))
)
(CONNECT_DATA =
(SERVICE_NAME = STBY.world)
)
)
" Assuming your database in already in ARCHIVELOG mode the first four of the following init.ora paramters will already be set. Add the last two entires:
log_archive_start = true
log_archive_dest_1 = "location=c:\Oracle\oradata\SID\archive\ mandatory reopen=5"
log_archive_dest_state_1 = enable
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
log_archive_dest_2 = "service=STBY optional reopen=5"
log_archive_dest_state_2 = enable
" Startup the database using: STARTUP PFILE=C:\Oracle\Admin\SID\PFile\init.ora
" Create standby database controlfile using: ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'c:\stbycf.f';
Standby Database Setup
" Copy the production backup files to the standby server.
" Copy the standby controlfile to the standby server.
" Alter the control_files and archive parameters of the init.ora as follows:
#use the standby service name
service_names = STBY.world
#reference the standby controlfile
control_files = ("c:\Oracle\oradata\SID\stbycf.f")
#switch archiving and reference archive directory
log_archive_start = false
log_archive_dest = c:\Oracle\oradata\SID\archive\
standby_archive_dest = c:\Oracle\oradata\SID\archive\
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
" Add the following entries into the listener.ora file:
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ntfm451)(PORT = 1512))
)
STANDBY_LISTENER = (ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(PORT=1512)(HOST=myHost))
)
The file should resemble the following:
# LISTENER.ORA Network Configuration File: C:\Oracle\Ora817\network\admin\listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myHost)(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myHost)(PORT = 1512))
)
)
(DESCRIPTION =
(PROTOCOL_STACK =
(PRESENTATION = GIOP)
(SESSION = RAW)
)
(ADDRESS = (PROTOCOL = TCP)(HOST = myHost)(PORT = 2481))
)
)
STANDBY_LISTENER = (ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(PORT=1512)(HOST=myHost))
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\Oracle\Ora817)
(PROGRAM = extproc)
)
(SID_DESC =
(ORACLE_HOME = C:\Oracle\Ora817)
(SID_NAME = PGOAL1)
)
)
" Reload the listener file using lsnrctl reload from the command prompt.
" Add the following entry into the tnsnames.ora file:
STBY=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myServerName)(PORT = 1512))
)
(CONNECT_DATA =
(SERVICE_NAME = STBY.world)
)
)
At this point the recovery process can start.
Standby Recovery
Regular recovery requires archive logs to be copied manually between the server and user initiation of the recovery process.
" Copy all archive logs from the primary to the standby server.
" From sqlplus do the following:
SQL> CONNECT sys/password AS SYSDBA
SQL> STARTUP NOMOUNT PFILE=C:\Oracle\Admin\SID\PFile\init.ora
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> RECOVER STANDBY DATABASE;
This process must be repeated every time archive logs are manually transfered.
Managed Standby Recovery
During managed recovery the transfer of archivelogs is controlled by the servers without user intervention.
" Copy all archive logs from the primary to the standby server. This is the only time you should need to do this.
" From sqlplus do the following:
SQL> CONNECT sys/password AS SYSDBA
SQL> STARTUP NOMOUNT PFILE=C:\Oracle\Admin\SID\PFile\init.ora
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> RECOVER MANAGED STANDBY DATABASE;
This window will then hang indefinitely while it continues to look for archive logs to apply. To stop the recovery open another sqlplus session and type:
SQL> RECOVER MANAGED STANDBY DATABASE CANCEL;
Read Only Database
The standby database can be opened in read only mode at any point. While open in this mode new archive logs are not applied to the database.
SQL> -- Cancel recovery if necessary
SQL> RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE OPEN READ ONLY;
The database can subsequently be switched back to recovery mode as follows:
SQL> CONNECT sys/password AS SYSDBA
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP NOMOUNT PFILE=C:\Oracle\Admin\SID\PFile\init.ora
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> RECOVER MANAGED STANDBY DATABASE;
Backup Standby Database
Backups of the standby database can only be performed if the database is shut down or in read only mode. Read only mode is best for managed recovery systems as archive logs will still be transfered during the backup process, thus preventing gap sequences. Once the server is in the desired mode simple copy the appropriate database files.
For more information see:
" Oracle8i Standby Database Concepts and Administration
Hope this helps. Regards Tim...
Владимир Пржиялковский,
координатор Евро-Азиатской Группы Пользователей Oracle,
преподаватель УКЦ Interface Ltd.
В некоторых информационных системах требуется обеспечить бесперебойный доступ к БД невзирая на всевозможные сбои и отказы оборудования и программ. Задача придать системе "высокую степень доступности" не имеет единственного решения в ИТ, а вместо этого имеет гамму разных решений, каждое со своими выгодами и ограничениями. Многие из таких решений реализованы и в Oracle рядом специальных конфигураций системы СУБД-БД. Одно из самых доступных - организация "горячего резерва". В Oracle для обозначения горячего резерва используется термин "standby".
Основные принципы горячего резервирования
В общем, принципы организации горячего резерва в Oracle довольно просты:
(1) Организуются две активные БД: одна основная, и другая резервная.
(2) Основная БД работает в режиме архивирования журналов. На возможность подсоединения к ней и на работу с данными никаких ограничений не накладывается.
(3) Резервная БД работает в специальном режиме постоянного восстановления с архивированных журналов, получаемых от основной БД; она все время "догоняет" основную.
(4) Из этого специального режима резервную БД можно перевести в другой, когда она приостановит процедуру восстановления и сможет предоставить свои данные, однако только для чтения. Из этого второго режима мы может вернуться в первый, для нее основной.
(5) Кроме этого, из режима восстановления резервную БД можно перевести в режим обычной полнофункциональной БД, но теперь уже безвозвратно.
Техника "standby" существует в Oracle давно, и в деталях реализации претерпела за прошедшее время несколько изменений. Ниже она будет описана по состоянию для версии 9.0.
Что дает пример ниже
Техника горячего резервирования описана в документации по Oracle. Однако давно замечено (интересно, что и в фирме об этом знают!), что эта документация, за исключением избранных мест, не может служить толковым учебником. К горячему резервированию это относится в полной мере.
С другой стороны есть целый ряд статей, где методично рассказано, как организовать standby database. Однако они все или относятся к Unix, и/или содержат ошибки - по крайней мере те, что попадались мне на глаза.
Пример организации резервного копирования ниже
а) относится к платформе Windows, то есть наиболее демократичен в смысле аудитории
б) не требует наличия второй машины (что, в общем, бестолково для реальной практики, но вполне нормально, и даже удобно, для знакомства)
в) не содержит ошибок.
Пользователи на платформе Unix, как правило, более продвинутые, без особого труда внесут в приводимый пример необходимые правки.
Постановка задачи и план решения
Пусть имеется БД teacher.class (использовано глобальное именование БД). Создадим для нее резервную БД с именем sb.class (имя sb часто используется в таких примерах, но это - чистая условность). Она будет работать на той же машине, что и teacher.class. Расположения каталогов будем считать OFA-удовлетворительным.
Для teacher.class должна иметься копия БД (проще, если холодная) и должен быть включен режим архивации. Если этого нет, перед выполнением примера нужно об этом позаботиться.
Вот, для определенности, выдержка из файла INIT.ORA для teacher.class в исходном состоянии:
background_dump_dest=d:\oracle\admin\teacher\bdump
core_dump_dest=d:\oracle\admin\teacher\cdump
user_dump_dest=d:\oracle\admin\teacher\udump
db_domain="class"
global_names = true
remote_login_passwordfile=EXCLUSIVE
compatible=9.0.0
db_name=teacher
instance_name=teacher
##################################
log_archive_start = true
log_archive_dest = "e:\oracle\oradata\teacher\archive"
log_archive_format = teachers%s.arc
План нижеприводимого решения включает следующие действия:
1. Подготовка основной БД к работе в спарке с резервной
2. Клонирование основной БД и формирование из полученного клона резервной БД
3. Конфигурирование сетевых компонент Oracle Net для возможности общения двух БД друг с другом
4. Запуск резервной БД в рабочем режиме
Подготовка места для резервной БД
Сначала резервная БД создается клонированием основной, затем мы "вдохнем в нее жизнь" и запустим в режиме восстановления. Поэтому прежде всего для sb.class нужно подготовить место на диске.
В нашем примере это каталог d:\oracle\admin\sb с подкаталогами udump, bdump, cdump и pfile, а также c:\oracle\oradata\sb - их нужно завести.
Еще не забудем завести каталог e:\oracle\oradata\sb\archive для хранения собственных архивов sb.class (на будущее, когда эту базу переведут в основной режим) и каталог e:\oracle\oradata\sb\teacher_archive для приема архивов от teacher.class.
Готовим основную БД
Подправим INIT.ORA для teacher.class:
background_dump_dest=d:\oracle\admin\teacher\bdump
core_dump_dest=d:\oracle\admin\teacher\cdump
user_dump_dest=d:\oracle\admin\teacher\udump
db_domain="class"
global_names = true
remote_login_passwordfile=EXCLUSIVE
control_files=("c:\oracle\oradata\teacher\control01.ctl")
compatible=9.0.0
db_name=teacher
instance_name=teacher
##################################
log_archive_start = true
#####log_archive_dest = "e:\oracle\oradata\teacher\archive"
log_archive_dest_1 = "location=e:\oracle\oradata\teacher\archive"
log_archive_format = teachers%s.arc
log_archive_dest_state_1 = enable
log_archive_dest_2 = "service=sb.class"
log_archive_dest_state_2 = enable
log_archive_min_succeed_dest = 1
fal_client = "sb.class"
Правкой затронута только нижняя часть, отделенная строкой из #.
Во-первых, от параметра LOG_ARCHIVE_DEST (сохраненному для совместимости) мы перешли к более современному LOG_ARCHIVE_DEST_1. Параметры LOG_ARCHIVE_DEST_N в последних версиях Oracle задают направления копирования освободившихся журналов в архив, а параметры LOG_ARCHIVE_DEST_STATE_N позволяют имеющиеся направления "включать" и временно "отключать".
В нашем случае к старому архиву e:\oracle\oradata\teacher\archive добавилось как раз еще одно такое направление, но уже не в виде каталога, как раньше, а в виде БД, которой teacher.class будет пересылать свои журналы.
Параметр FAL_CLIENT = "sb.class" уточняет, что это будет резервная БД sb.class и что пересылка будет автоматической.
Остановим основную БД и выдадим в SQL*Plus:
STARTUP PFILE=?/database/initteacher.ora
ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'c:\oracle\oradata\sb\control01.ctl';
ALTER SYSTEM ARCHIVE LOG CURRENT;
SHUTDOWN
То есть мы приготовили контрольный файл для резервной БД и зафиксировали точку отсчета для пересылки архивируемых журналов на sb.class.
Готовим клон для резервной БД
Копируем все файлы БД teacher.class, кроме контрольного, в c:\oracle\oradata\sb. Контрольный там уже есть.
Копируем INIT.ORA БД teacher.class в d:\oracle\admin\teacher\pfile. Правим его:
background_dump_dest=d:\oracle\admin\sb\bdump
core_dump_dest=d:\oracle\admin\sb\cdump
user_dump_dest=d:\oracle\admin\sb\udump
db_domain="class"
global_names = true
remote_login_passwordfile=EXCLUSIVE
control_files=("c:\oracle\oradata\sb\control01.ctl")
compatible=9.0.0
db_name=teacher
instance_name=sb
##################################
log_archive_format = teachers%s.arc
db_file_name_convert = "\ORADATA\TEACHER", "\ORADATA\SB"
log_file_name_convert = "\ORADATA\TEACHER", "\ORADATA\SB"
standby_archive_dest = "e:\oracle\oradata\sb\teacher_archive"
log_archive_dest = "e:\oracle\oradata\sb\archive"
lock_name_space = sb
fal_server = "teacher.class"
Обратите внимание на изменение имен каталогов и названий в верхней части текста, однако главные изменения расположены ниже строки-комментария.
Параметры DB_FILE_NAME_CONVERT и LOG_FILE_NAME_CONVERT нужны только если структуры каталогов основной и резервной БД не совпадают. В нашем случае, когда обе БД работают на одной машине, это неизбежно. Когда обе БД работают на разных машинах, проще использовать одинаковую структуру каталогов и об этих параметрах забыть.
Параметр STANDBY_ARCHIVE_DEST указывает на каталог, куда "принимающая сторона" sb.class будет складывать поступающие от teacher.class архивные копии журнала.
Параметр LOG_ARCHIVE_DEST задает каталог-архив уже для своих изменений sb.class (на будущее).
Параметр LOCK_NAME_SPACE нужен только в нашей не типичной для практики ситуации, когда обе БД будут работать на одной машине; без него две СУБД не смогут одновременно общаться с разными БД, имеющими одинаковые имена.
Наконец, параметр FAL_SERVER симметричен FAL_CLIENT в INIT-файле для teacher.class.
Копируем из e:\oracle\oradata\teacher\archive в e:\oracle\oradata\sb\teacher_archive последний по времени архивированный файл.
Обеспечиваем взаимодействие по Oracle Net
Нужно ненадолго отвлечься от резервной БД и подправить файлы listener.ora и tnsnames.ora, чтобы обе СУБД могли общаться. У нас будет автоматическая пересылка файлов на резервную БД (а могли бы этого не делать и переносить архивные файлы вручную, но это не очень интересно), и для этого основная база должна уметь соединяться с резервной. Нужные конфигурационные файлы у нас находятся в одном месте: в %oracle_home%\network\admin, а в "боевых условиях" они будут разнесены по разным машинам. Добавляем в listener.ora фрагмент:
(SID_LIST =
(оставить, как было)
(SID_DESC =
(GLOBAL_DBNAME = teacher.class)
(ORACLE_HOME = c:\oracle\ora90)
(SID_NAME = sb)
)
)
После этого listener надо перезапустить, проще всего - через окошко Services в ОС Windows, но можно и из командной строки.
В файл tnsnames.ora добавляем
sb.class =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = wsa46)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sb)
)
)
"Оживляем" резервную БД и запускаем ее
Теперь резервную БД нужно "оживить". Войдем в консольном окошке ОС в каталог %oracle_home%\database. Скопируем initteacher.ora в initsb.ora и подправим в initsb.ora ссылку на файл: IFILE='c:\oracle\admin\teacher\pfile\init.ora' заменим на IFILE='c:\oracle\admin\sb\pfile\init.ora'.
Создадим файл пароля для sb.class:
orapwd file=PWDsb.ora password=change_on_install
Заведем службу ОС для sb.class:
oradim -new -sid sb -startmode m -pfile c:\oracle\ora90\database\initsb.ora
"Приводим" резервную БД "в чувство" и переводим в режим автоматического подката по получаемым файлам журналов. Выдаем в SQL*Plus:
CONNECT sys/change_on_install AS SYSDBA
STARTUP MOUNT PFILE=?/database/initsb.ora
RECOVER MANAGED STANDBY DATABASE
В этом месте SQL*Plus "зависает", но так и должно быть. Уходим из этого окошка, но не закрываем его.
Проверка
Теперь можно для наглядности вывести на экран два окошка с содержимым каталогов e:\oracle\oradata\teacher\archive и e:\oracle\oradata\sb\teacher_archive соответственно.
Запускаем снова основную БД в окошке с SQL*Plus, где мы эту базу останавливали:
STARTUP PFILE=?/database/initteacher.ora
Выдадим несколько раз
ALTER SYSTEM SWITCH LOGFILE;
Если все было проделано без ошибок, в обоих окошках с каталогами можно наблюдать появление одних и тех же архивных копий журнала, причем с запаздыванием: сначала в одном, потом в другом. Это свидетельствует о том, что архивные копии реально пересылаются на резервную БД.
Еще для проверки можно запустить и процесс внесения в основную БД фактических изменений, в результате чего журнальные файлы начнут переключаться самостоятельно. Для нас результат должен быть тем же самым.
Перевод резервной БД в состояние, допускающее выборку
Откроем новое консольное окошко, где выдадим в SQL*Plus:
CONNECT sys/change_on_install@sb.class AS SYSDBA
RECOVER MANAGED STANDBY CANCEL
EXIT
Вернемся в прежнее окошко с резервной БД и увидим, что сеанс SQL*Plus в нем "отвис". Сейчас архивные копии продолжают поступать в резервную БД, однако сама база уже не подкатывается. Наберем
ALTER DATABASE OPEN READONLY;
Теперь из резервной базы можно делать выборки данных.
Возврат резервной БД в режим подката
В этом же последнем окошке набираем:
CONNECT sys/change_on_install AS SYSDBA
SHUTDOWN
STARTUP MOUNT PFILE=?/database/initsb.ora
RECOVER AUTOMATIC STANDBY DATABASE
CANCEL
RECOVER MANAGED STANDBY DATABASE
Как и прежде, тут мы "зависаем".
Перевод резервной БД в рабочее состояние
Вначале поступаем, как и прежде, а потом - иначе. В новом окошке выдадим в SQL*Plus:
CONNECT sys/change_on_install@sb.class AS SYSDBA
RECOVER MANAGED STANDBY CANCEL
ALTER DATABASE RECOVER STANDBY DATABASE;
ALTER DATABASE RECOVER CANCEL;
ALTER DATABASE ACTIVATE STANDBY DATABASE;
Теперь правильнее всего будет остановить бывшую резервную, а отныне - рабочую БД, снять с нее холодную копию, проделать необходимые правки в файлах Oracle Net и запустить базу снова и подготовить для нее новый резерв. После этого можно будет использовать ее в рабочем режиме.
Standby Database
" Primary Database Setup
" Standby Database Setup
" Standby Recovery
" Managed Standby Recovery
" Read Only Database
" Standby Database Backup
Primary Database Setup
" Shutdown the database using: SHUTDOWN IMMEDIATE
" Backup all database files.
" Add an entry for the standby server into the tnsnames.ora file:
STBY=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myServerName)(PORT = 1512))
)
(CONNECT_DATA =
(SERVICE_NAME = STBY.world)
)
)
" Assuming your database in already in ARCHIVELOG mode the first four of the following init.ora paramters will already be set. Add the last two entires:
log_archive_start = true
log_archive_dest_1 = "location=c:\Oracle\oradata\SID\archive\ mandatory reopen=5"
log_archive_dest_state_1 = enable
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
log_archive_dest_2 = "service=STBY optional reopen=5"
log_archive_dest_state_2 = enable
" Startup the database using: STARTUP PFILE=C:\Oracle\Admin\SID\PFile\init.ora
" Create standby database controlfile using: ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'c:\stbycf.f';
Standby Database Setup
" Copy the production backup files to the standby server.
" Copy the standby controlfile to the standby server.
" Alter the control_files and archive parameters of the init.ora as follows:
#use the standby service name
service_names = STBY.world
#reference the standby controlfile
control_files = ("c:\Oracle\oradata\SID\stbycf.f")
#switch archiving and reference archive directory
log_archive_start = false
log_archive_dest = c:\Oracle\oradata\SID\archive\
standby_archive_dest = c:\Oracle\oradata\SID\archive\
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
" Add the following entries into the listener.ora file:
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ntfm451)(PORT = 1512))
)
STANDBY_LISTENER = (ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(PORT=1512)(HOST=myHost))
)
The file should resemble the following:
# LISTENER.ORA Network Configuration File: C:\Oracle\Ora817\network\admin\listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myHost)(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myHost)(PORT = 1512))
)
)
(DESCRIPTION =
(PROTOCOL_STACK =
(PRESENTATION = GIOP)
(SESSION = RAW)
)
(ADDRESS = (PROTOCOL = TCP)(HOST = myHost)(PORT = 2481))
)
)
STANDBY_LISTENER = (ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(PORT=1512)(HOST=myHost))
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\Oracle\Ora817)
(PROGRAM = extproc)
)
(SID_DESC =
(ORACLE_HOME = C:\Oracle\Ora817)
(SID_NAME = PGOAL1)
)
)
" Reload the listener file using lsnrctl reload from the command prompt.
" Add the following entry into the tnsnames.ora file:
STBY=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myServerName)(PORT = 1512))
)
(CONNECT_DATA =
(SERVICE_NAME = STBY.world)
)
)
At this point the recovery process can start.
Standby Recovery
Regular recovery requires archive logs to be copied manually between the server and user initiation of the recovery process.
" Copy all archive logs from the primary to the standby server.
" From sqlplus do the following:
SQL> CONNECT sys/password AS SYSDBA
SQL> STARTUP NOMOUNT PFILE=C:\Oracle\Admin\SID\PFile\init.ora
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> RECOVER STANDBY DATABASE;
This process must be repeated every time archive logs are manually transfered.
Managed Standby Recovery
During managed recovery the transfer of archivelogs is controlled by the servers without user intervention.
" Copy all archive logs from the primary to the standby server. This is the only time you should need to do this.
" From sqlplus do the following:
SQL> CONNECT sys/password AS SYSDBA
SQL> STARTUP NOMOUNT PFILE=C:\Oracle\Admin\SID\PFile\init.ora
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> RECOVER MANAGED STANDBY DATABASE;
This window will then hang indefinitely while it continues to look for archive logs to apply. To stop the recovery open another sqlplus session and type:
SQL> RECOVER MANAGED STANDBY DATABASE CANCEL;
Read Only Database
The standby database can be opened in read only mode at any point. While open in this mode new archive logs are not applied to the database.
SQL> -- Cancel recovery if necessary
SQL> RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE OPEN READ ONLY;
The database can subsequently be switched back to recovery mode as follows:
SQL> CONNECT sys/password AS SYSDBA
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP NOMOUNT PFILE=C:\Oracle\Admin\SID\PFile\init.ora
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> RECOVER MANAGED STANDBY DATABASE;
Backup Standby Database
Backups of the standby database can only be performed if the database is shut down or in read only mode. Read only mode is best for managed recovery systems as archive logs will still be transfered during the backup process, thus preventing gap sequences. Once the server is in the desired mode simple copy the appropriate database files.
For more information see:
" Oracle8i Standby Database Concepts and Administration
Hope this helps. Regards Tim...
Перенос БД на новую тачку. Не мое. Круче
Памятку я писал для себя. Потоэтому некоторые вещи упустил. Решил выложить первоисточник, на основании которого делал свое. Хай прощает автор, непомню где брал.
Переименование SID
1. Запустить базу.
2. Выполнить команду ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
3. Остановить базу через normal, transactional, immediate, НО НЕ abort!
4. В полученном файле убрать все лишние строки (начинающиеся на * и т.д.),
установить CREATE CONTROLFILE REUSE SET DATABASE "" RESETLOGS NOARCHIVELOG
установить ALTER DATABASE OPEN RESETLOGS;
(RESETLOGS важно и в CREATE CONTROLFILE и в ALTER DATABASE OPEN, иначе будут ошибки)
изменить везде в путях к .DBF-файлам и REDO-логам на
=========== ВНИМАНИЕ !!! ОЧЕНЬ ВАЖНО !!! ==================================
Команду STARTUP NOMOUNT заменить на
STARTUP PFILE="\admin\\pfile\init.ora" NOMOUNT;
===========================================================================
Полученный трассировочный файл условно назовем CTL.SQL
5. Переименовать каталоги
\admin\ на \admin\
\oradata\ на \oradata\
6. Переименовать файл\admin\\pfile\init.ora на
\admin\\pfile\init.ora
7. В самом init файле изменить параметры
db_name
instance_name
service_names
control_files
log_archive_dest_n
background_dump_dest
core_dump_dest
user_dump_dest
8. Переименовать службу:
c:\>oradim -edit -sid -newsid -startmode a -pfile "\admin\\pfile\init.ora"
9. В реестре установить значение параметра ORA__AUTOSTART в FALSE
(чтобы вместе с запуском службы не запускалась база)
10. Изменить tnsnames.ora
=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = #host)(PORT = #port))
)
(CONNECT_DATA =
(SERVICE_NAME =)
)
)
11. Изменить listener.ora
SID_LIST_LISTENER =
(SID_LIST =
...
(SID_DESC =
(GLOBAL_DBNAME =)
(ORACLE_HOME =)
(SID_NAME =)
)
...
)
ПЕРЕЗАПУСТИТЬ ПЕРЕИМЕНОВАННУЮ СЛУЖБУ.
ПЕРЕЗАПУСТИТЬ LISTENER.
12. Создать файл init.ora в каталоге \database с параметром
IFILE='\admin\\pfile\init.ora'
13. Создать файл паролей:
c:\>orapwd file=pwd.ora password= entries=
14. Зайти в svrmgrl (или в sqlplus).
connect internal@
@CTL; (см. п.2-4)
15. Вперед на пиво!
Переименование SID
1. Запустить базу.
2. Выполнить команду ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
3. Остановить базу через normal, transactional, immediate, НО НЕ abort!
4. В полученном файле убрать все лишние строки (начинающиеся на * и т.д.),
установить CREATE CONTROLFILE REUSE SET DATABASE "
установить ALTER DATABASE OPEN RESETLOGS;
(RESETLOGS важно и в CREATE CONTROLFILE и в ALTER DATABASE OPEN, иначе будут ошибки)
изменить везде в путях к .DBF-файлам и REDO-логам
=========== ВНИМАНИЕ !!! ОЧЕНЬ ВАЖНО !!! ==================================
Команду STARTUP NOMOUNT заменить на
STARTUP PFILE="
===========================================================================
Полученный трассировочный файл условно назовем CTL.SQL
5. Переименовать каталоги
6. Переименовать файл
7. В самом init файле изменить параметры
db_name
instance_name
service_names
control_files
log_archive_dest_n
background_dump_dest
core_dump_dest
user_dump_dest
8. Переименовать службу:
c:\>oradim -edit -sid
9. В реестре установить значение параметра ORA_
(чтобы вместе с запуском службы не запускалась база)
10. Изменить tnsnames.ora
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = #host)(PORT = #port))
)
(CONNECT_DATA =
(SERVICE_NAME =
)
)
11. Изменить listener.ora
SID_LIST_LISTENER =
(SID_LIST =
...
(SID_DESC =
(GLOBAL_DBNAME =
(ORACLE_HOME =
(SID_NAME =
)
...
)
ПЕРЕЗАПУСТИТЬ ПЕРЕИМЕНОВАННУЮ СЛУЖБУ.
ПЕРЕЗАПУСТИТЬ LISTENER.
12. Создать файл init
IFILE='
13. Создать файл паролей:
c:\>orapwd file=pwd
14. Зайти в svrmgrl (или в sqlplus).
connect internal@
@CTL; (см. п.2-4)
15. Вперед на пиво!
Перенос БД на новую тачку.
Когда-то делал себе памятку для переноса БД.
1.Стопорнуть БД. conn sys as sysdba;
shutdown immediate;
2.Скопировать: датафайлы,
редологи,
контролфайлы,
инифайл
3.Перенести файлы на новую тачку.
4.Создать на новой тачке сервис.
oradim -new -sid -srvc -pfile 'f:\.......'
5.Создать на новой тачке файл пароля sys.
orapwd file=pwd.ora password=<....> entries=<1|2|..>
(скинуть на всяк случай в папку oracle\ora92\dbs\)
6.Сделать коннест к новой БД. conn sys as sysdba;
7.STARTUP MOUNT PFILE='F:\cms\test\cmstest2_\pfile\init_cmstest2.ora'
8.Делаем следующий скрипт для каждого файла данных и редологов
alter database rename file
'I:\ORA_REDOLOG\COMPASS\LOGCMS3.ORA'
to 'E:\cms\test\cmstest2_\logs\redo\LOGCMS3.ORA'
9.alter database open
10.Нет файла ТЕМП делаем
а.RECOVER DATABASE А ПОТОМ
alter database tempfile 'K:\COMPASS\TEMP.ORA' drop;
б.ALTER TABLESPACE TEMP ADD TEMPFILE 'F:\cms\test\cmstest2_\system\TEMP.ORA'
SIZE 104857600 REUSE AUTOEXTEND OFF;
в. п.9
Если нет контрол файла
1. STARTUP NOMOUNT PFILE='F:\cms\test\cmstest2_\pfile\init_cmstest2.ora' ;
2.
CREATE CONTROLFILE set DATABASE "" RESETLOGS NOARCHIVELOG
MAXLOGFILES 100
MAXLOGMEMBERS 5
MAXDATAFILES 200
MAXINSTANCES 1
MAXLOGHISTORY 452
LOGFILE
GROUP 3 'E:\cms\test\cmstest2_\logs\redo\LOGCMS3.ORA' SIZE 100M,
GROUP 4 'E:\cms\test\cmstest2_\logs\redo\LOGCMS4.ORA' SIZE 100M
DATAFILE
'F:\cms\test\cmstest2_\system\DATASYSTEM01.DBF',
'F:\cms\test\cmstest2_\system\DATAUNDOTBS01.DBF',
'F:\cms\test\cmstest2_\system\DATADRSYS01.DBF',
'F:\cms\test\cmstest2_\system\DATAEXAMPLE01.DBF',
'F:\cms\test\cmstest2_\system\DATAINDX01.DBF',
'F:\cms\test\cmstest2_\system\DATAODM01.DBF',
'F:\cms\test\cmstest2_\system\DATATOOLS01.DBF',
'F:\cms\test\cmstest2_\system\DATAUSERS01.DBF',
'F:\cms\test\cmstest2_\system\DATAXDB01.DBF',
'F:\cms\test\cmstest2_\data\A4M.ORA'
CHARACTER SET CL8MSWIN1251
;
3. alter database mount;
4. RECOVER DATABASE;
5. ALTER DATABASE OPEN;
6. ALTER TABLESPACE TEMP ADD TEMPFILE 'F:\cms\test\cmstest2_\system\TEMP.ORA'
SIZE 104857600 REUSE AUTOEXTEND OFF;
Напоследок совет. Чтобы без проблем подобное сделать, желательно в начале работы БД выполнить скрипт.
1.Стопорнуть БД. conn sys as sysdba;
shutdown immediate;
2.Скопировать: датафайлы,
редологи,
контролфайлы,
инифайл
3.Перенести файлы на новую тачку.
4.Создать на новой тачке сервис.
oradim -new -sid
5.Создать на новой тачке файл пароля sys.
orapwd file=pwd
(скинуть на всяк случай в папку oracle\ora92\dbs\)
6.Сделать коннест к новой БД. conn sys as sysdba;
7.STARTUP MOUNT PFILE='F:\cms\test\cmstest2_\pfile\init_cmstest2.ora'
8.Делаем следующий скрипт для каждого файла данных и редологов
alter database rename file
'I:\ORA_REDOLOG\COMPASS\LOGCMS3.ORA'
to 'E:\cms\test\cmstest2_\logs\redo\LOGCMS3.ORA'
9.alter database open
10.Нет файла ТЕМП делаем
а.RECOVER DATABASE А ПОТОМ
alter database tempfile 'K:\COMPASS\TEMP.ORA' drop;
б.ALTER TABLESPACE TEMP ADD TEMPFILE 'F:\cms\test\cmstest2_\system\TEMP.ORA'
SIZE 104857600 REUSE AUTOEXTEND OFF;
в. п.9
Если нет контрол файла
1. STARTUP NOMOUNT PFILE='F:\cms\test\cmstest2_\pfile\init_cmstest2.ora' ;
2.
CREATE CONTROLFILE set DATABASE "
MAXLOGFILES 100
MAXLOGMEMBERS 5
MAXDATAFILES 200
MAXINSTANCES 1
MAXLOGHISTORY 452
LOGFILE
GROUP 3 'E:\cms\test\cmstest2_\logs\redo\LOGCMS3.ORA' SIZE 100M,
GROUP 4 'E:\cms\test\cmstest2_\logs\redo\LOGCMS4.ORA' SIZE 100M
DATAFILE
'F:\cms\test\cmstest2_\system\DATASYSTEM01.DBF',
'F:\cms\test\cmstest2_\system\DATAUNDOTBS01.DBF',
'F:\cms\test\cmstest2_\system\DATADRSYS01.DBF',
'F:\cms\test\cmstest2_\system\DATAEXAMPLE01.DBF',
'F:\cms\test\cmstest2_\system\DATAINDX01.DBF',
'F:\cms\test\cmstest2_\system\DATAODM01.DBF',
'F:\cms\test\cmstest2_\system\DATATOOLS01.DBF',
'F:\cms\test\cmstest2_\system\DATAUSERS01.DBF',
'F:\cms\test\cmstest2_\system\DATAXDB01.DBF',
'F:\cms\test\cmstest2_\data\A4M.ORA'
CHARACTER SET CL8MSWIN1251
;
3. alter database mount;
4. RECOVER DATABASE;
5. ALTER DATABASE OPEN;
6. ALTER TABLESPACE TEMP ADD TEMPFILE 'F:\cms\test\cmstest2_\system\TEMP.ORA'
SIZE 104857600 REUSE AUTOEXTEND OFF;
Напоследок совет. Чтобы без проблем подобное сделать, желательно в начале работы БД выполнить скрипт.
alter database backup controlfile to trace;
или
alter database backup controlfile to trace as '/some/arbitrary/path';
Результат прибить гвоздями шоб не потерялся.
Горячий бекап ручками. Ну почти ручками.
Работает под Windows. Лень прилизывать.
Делаем батник
sqlplus -s /nolog @backup.sql
Файлик backup.sql
@@users_info
CONNECT &DBA_USER/&DBA_USER_PASSWORD@&NET_SERVICE_NAME
--@@users_info
------------------------------------------------------
--CONNECT sys/a@vpahomov as sysdba
------------------------------------------------------
set serveroutput on
set trimspool on
set line 500
set head off
set feed off
spool backup.cmd
declare
copy_cmnd constant varchar2(30) := 'ocopy';
copy_dest constant varchar2(30) := 'C:\BACKUP\';
dbname varchar2(30);
logmode varchar2(30);
begin
select name, log_mode
into dbname, logmode
from sys.v_$database;
if logmode <> 'ARCHIVELOG' then
raise_application_error(-20000,
'ERROR: Database must be in ARCHIVELOG mode!!!');
return;
end if;
dbms_output.put_line('spool backup.'||dbname||'.'||
to_char(sysdate, 'ddMonyy')||'.log');
-- Loop through tablespaces
for c1 in (select tablespace_name ts
from sys.dba_tablespaces)
loop
dbms_output.put_line('alter tablespace '||c1.ts||' begin backup;');
-- Loop through tablespaces' data files
for c2 in (select file_name fil
from sys.dba_data_files
where tablespace_name = c1.ts)
loop
dbms_output.put_line('host '||copy_cmnd||' '||c2.fil||' '||copy_dest);
end loop;
dbms_output.put_line('alter tablespace '||c1.ts||' end backup;');
end loop;
-- Backup controlfile and switch logfiles
dbms_output.put_line('alter database backup controlfile to trace;');
dbms_output.put_line('alter database backup controlfile to '||''''||
copy_dest||'control.'||dbname||'.'||
to_char(sysdate,'DDMonYYHH24MI')||''''||';');
dbms_output.put_line('alter system switch logfile;');
dbms_output.put_line('spool off');
end;
/
spool off
set head on
set feed on
set serveroutput off
-- Unremark/uncomment the following line to run the backup script
@backup.cmd;
exit;
Файлик users_info.sql
--------------------------------------
-- ПАРАМЕТРЫ ДЛЯ СОЕДИНЕНИЯ С БАЗОЙ
--------------------------------------
DEFINE DBA_USER = system
DEFINE DBA_USER_PASSWORD = a
DEFINE NET_SERVICE_NAME = vpahomov
Файлика backup.cmd у меня щас нет. Поэтому не прилагаю.
Делаем батник
sqlplus -s /nolog @backup.sql
Файлик backup.sql
@@users_info
CONNECT &DBA_USER/&DBA_USER_PASSWORD@&NET_SERVICE_NAME
--@@users_info
------------------------------------------------------
--CONNECT sys/a@vpahomov as sysdba
------------------------------------------------------
set serveroutput on
set trimspool on
set line 500
set head off
set feed off
spool backup.cmd
declare
copy_cmnd constant varchar2(30) := 'ocopy';
copy_dest constant varchar2(30) := 'C:\BACKUP\';
dbname varchar2(30);
logmode varchar2(30);
begin
select name, log_mode
into dbname, logmode
from sys.v_$database;
if logmode <> 'ARCHIVELOG' then
raise_application_error(-20000,
'ERROR: Database must be in ARCHIVELOG mode!!!');
return;
end if;
dbms_output.put_line('spool backup.'||dbname||'.'||
to_char(sysdate, 'ddMonyy')||'.log');
-- Loop through tablespaces
for c1 in (select tablespace_name ts
from sys.dba_tablespaces)
loop
dbms_output.put_line('alter tablespace '||c1.ts||' begin backup;');
-- Loop through tablespaces' data files
for c2 in (select file_name fil
from sys.dba_data_files
where tablespace_name = c1.ts)
loop
dbms_output.put_line('host '||copy_cmnd||' '||c2.fil||' '||copy_dest);
end loop;
dbms_output.put_line('alter tablespace '||c1.ts||' end backup;');
end loop;
-- Backup controlfile and switch logfiles
dbms_output.put_line('alter database backup controlfile to trace;');
dbms_output.put_line('alter database backup controlfile to '||''''||
copy_dest||'control.'||dbname||'.'||
to_char(sysdate,'DDMonYYHH24MI')||''''||';');
dbms_output.put_line('alter system switch logfile;');
dbms_output.put_line('spool off');
end;
/
spool off
set head on
set feed on
set serveroutput off
-- Unremark/uncomment the following line to run the backup script
@backup.cmd;
exit;
Файлик users_info.sql
--------------------------------------
-- ПАРАМЕТРЫ ДЛЯ СОЕДИНЕНИЯ С БАЗОЙ
--------------------------------------
DEFINE DBA_USER = system
DEFINE DBA_USER_PASSWORD = a
DEFINE NET_SERVICE_NAME = vpahomov
Файлика backup.cmd у меня щас нет. Поэтому не прилагаю.
Холодный бекап ручками. Ну почти ручками.
Пример работал под Windows.
Делаем батник, ну или ручками в командной строке.
sqlplus /nolog @selfile.txt
Создаем файлик selfile.txt
@@users_info
CONNECT &DBA_USER/&DBA_USER_PASSWORD@&NET_SERVICE_NAME as sysdba
set serveroutput on
set trimspool on
set line 500
set head off
set feed off
spool backup.cmd
declare
copy_cmnd constant varchar2(30) := 'ocopy';
copy_dest constant varchar2(30) := 'C:\BACKUP\';
dbname varchar2(30);
logmode varchar2(30);
begin
select name, log_mode
into dbname, logmode
from sys.v_$database;
dbms_output.put_line('spool backup.'||dbname||'.'||
to_char(sysdate, 'ddMonyy')||'.log');
-- Control files:
for c1 in (select name
from v$controlfile)
loop
dbms_output.put_line('host '||copy_cmnd||' '||c1.name||' '||copy_dest);
end loop;
-- Datafiles:
for c1 in (select name
from v$datafile
order by name)
loop
dbms_output.put_line('host '||copy_cmnd||' '||c1.name||' '||copy_dest);
end loop;
-- Tempfiles
for c1 in (select name
from v$tempfile
order by name)
loop
dbms_output.put_line('host '||copy_cmnd||' '||c1.name||' '||copy_dest);
end loop;
-- Redo Log files
for c1 in (select member
from v$logfile
order by member)
loop
dbms_output.put_line('host '||copy_cmnd||' '||c1.member||' '||copy_dest);
end loop;
dbms_output.put_line('spool off');
end;
/
spool off
set head on
set feed on
set serveroutput off
shutdown immediate;
-- Unremark/uncomment the following line to run the backup script
@backup.cmd;
startup force;
exit;
Создаем файлик users_info.sql
--------------------------------------
-- ПАРАМЕТРЫ ДЛЯ СОЕДИНЕНИЯ С БАЗОЙ
--------------------------------------
DEFINE DBA_USER = sys
DEFINE DBA_USER_PASSWORD = a
DEFINE NET_SERVICE_NAME = vpahomov
У меня получился файл backup.cmd
spool backup.VPAHOMOV.08Сен06.log
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\CONTROL01.CTL C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\CONTROL02.CTL C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\CONTROL03.CTL C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\CWMLITE01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\DBWEB.ORA C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\DRSYS01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\EXAMPLE01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\INDX01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\ODM01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\SYSTEM01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\TOOLS01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\UNDOTBS01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\USERS01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\XDB01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\TEMP01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\REDO01.LOG C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\REDO02.LOG C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\REDO03.LOG C:\BACKUP\
spool off
Делаем батник, ну или ручками в командной строке.
sqlplus /nolog @selfile.txt
Создаем файлик selfile.txt
@@users_info
CONNECT &DBA_USER/&DBA_USER_PASSWORD@&NET_SERVICE_NAME as sysdba
set serveroutput on
set trimspool on
set line 500
set head off
set feed off
spool backup.cmd
declare
copy_cmnd constant varchar2(30) := 'ocopy';
copy_dest constant varchar2(30) := 'C:\BACKUP\';
dbname varchar2(30);
logmode varchar2(30);
begin
select name, log_mode
into dbname, logmode
from sys.v_$database;
dbms_output.put_line('spool backup.'||dbname||'.'||
to_char(sysdate, 'ddMonyy')||'.log');
-- Control files:
for c1 in (select name
from v$controlfile)
loop
dbms_output.put_line('host '||copy_cmnd||' '||c1.name||' '||copy_dest);
end loop;
-- Datafiles:
for c1 in (select name
from v$datafile
order by name)
loop
dbms_output.put_line('host '||copy_cmnd||' '||c1.name||' '||copy_dest);
end loop;
-- Tempfiles
for c1 in (select name
from v$tempfile
order by name)
loop
dbms_output.put_line('host '||copy_cmnd||' '||c1.name||' '||copy_dest);
end loop;
-- Redo Log files
for c1 in (select member
from v$logfile
order by member)
loop
dbms_output.put_line('host '||copy_cmnd||' '||c1.member||' '||copy_dest);
end loop;
dbms_output.put_line('spool off');
end;
/
spool off
set head on
set feed on
set serveroutput off
shutdown immediate;
-- Unremark/uncomment the following line to run the backup script
@backup.cmd;
startup force;
exit;
Создаем файлик users_info.sql
--------------------------------------
-- ПАРАМЕТРЫ ДЛЯ СОЕДИНЕНИЯ С БАЗОЙ
--------------------------------------
DEFINE DBA_USER = sys
DEFINE DBA_USER_PASSWORD = a
DEFINE NET_SERVICE_NAME = vpahomov
У меня получился файл backup.cmd
spool backup.VPAHOMOV.08Сен06.log
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\CONTROL01.CTL C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\CONTROL02.CTL C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\CONTROL03.CTL C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\CWMLITE01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\DBWEB.ORA C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\DRSYS01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\EXAMPLE01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\INDX01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\ODM01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\SYSTEM01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\TOOLS01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\UNDOTBS01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\USERS01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\XDB01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\TEMP01.DBF C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\REDO01.LOG C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\REDO02.LOG C:\BACKUP\
host ocopy C:\ORACLE9\ORA92\ORADATA\VPAHOMOV\REDO03.LOG C:\BACKUP\
spool off
Делал Standby.
Пример делался на все том же vmware. Може за рекламу кто заплатит :) А так как за рекламу никто не платит, то базы расположились на одной виртуальной машине. Но в разных папочках. Описание не панацея, я с бубном долго бегал пока не заставил работать.
Пример делался в основном по этой документации.
Готовим файлы init.ora для базы PrimaryDB(pahomway) и StandbyDB(stpahomway).
Пример PrimaryDB(pahomway).
pahomway.__db_cache_size=96468992
pahomway.__java_pool_size=4194304
pahomway.__large_pool_size=4194304
pahomway.__shared_pool_size=58720256
pahomway.__streams_pool_size=0
*.audit_file_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/adump'
*.background_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/home/oracle/oracle/product/10.2.0/oradata/pahomway/control01.ctl','/home/oracle/oracle/product/10.2.0/oradata/pahomway/control02.ctl','/home/oracle/oracle/product/10.2.0/oradata/pahomway/control03.ctl'
*.core_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='pahomway'
*.db_recovery_file_dest='/home/oracle/oracle/product/10.2.0/db_1/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.db_unique_name='pahomway'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=pahomwayXDB)'
*.fal_client='stpahomway'
*.fal_server='pahomway'
*.job_queue_processes=10
*.log_archive_config='dg_config=(pahomway,stpahomway)'
*.log_archive_dest_1='location=/home/oracle/oracle/product/10.2.0/oradata/arch1/ db_unique_name=pahomway'
*.log_archive_dest_2='SERVICE=stpahomway LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stpahomway'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=167772160
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/udump'
Пример StandbyDB(stpahomway).
*.audit_file_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway/adump'
*.background_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/home/oracle/oracle/product/10.2.0/oradata/stpahomway/stpahomway.ctl'
*.core_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_file_name_convert='pahomway','stpahomway'
*.db_name='pahomway'
*.db_recovery_file_dest='/home/oracle/oracle/product/10.2.0/db_1/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.db_unique_name='stpahomway'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=stpahomwayXDB)'
*.fal_client='stpahomway'
*.fal_server='pahomway'
*.job_queue_processes=10
*.log_archive_config='dg_config=(pahomway,stpahomway)'
*.log_archive_dest_1='location=/home/oracle/oracle/product/10.2.0/oradata/arch2/ db_unique_name=stpahomway'
*.log_archive_dest_2='service=pahomway LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pahomway'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.log_file_name_convert='/home/oracle/oracle/product/10.2.0/oradata/arch1/','/home/oracle/oracle/product/10.2.0/oradata/arch2/','/home/oracle/oracle/product/10.2.0/oradata/pahomway/','/home/oracle/oracle/product/10.2.0/oradata/stpahomway/'
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=167772160
*.standby_file_management='auto'
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway/udump'
PrimaryDB - SQL> ALTER DATABASE FORCE LOGGING;
PrimaryDB - SQL> alter database archivelog;
PrimaryDB - делаем активными настройки init.ora
SQL> startup pfile='/home/oracle/oracle/product/10.2.0/db_1/admin/pahomway_last.ora';
PrimaryDB – Делаем оперативные логии для StandbyDB SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 10 2> ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500M;
StandbyDB – создаем файл паролей orapwd file=/…/orapwpahomway password=a entries=4
StandbyDB – Настраиваем листенер и TNS
StandbyDB – создаем папки для архив логов и данных
StandbyDB – стартуем (рестартуем) листенер
lsnrctl stop
lsnrctl start
PrimaryDB - с помощью rman делаем backup RMAN> backup database plus archivelog;
PrimaryDB – SQL> alter database create standby controlfile as '/home/oracle/oracle/product/10.2.0/oradata/stpahomway/stpahomway.ctl';
StandbyDB – делаем восстановление стартуя с подготовленного файла
SQL> startup mount pfile='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway_last.ora';
RMAN> connect target sys/a@stpahomway
RMAN> run {
2> allocate channel d1 type disk;
3> restore database;
4> recover database;
5> }
StandbyDB – запускаем то, шо получилось
SQL> shutdown immediate;
SQL> startup nomount pfile='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway_last.ora';
SQL> alter database mount standby database;
SQL> alter database recover managed standby database disconnect from session;
PrimaryDB – проверяем работу SQL> alter system switch logfile;
Дальше не проверял. Но хочется верить в сказку :)
Перевод STANDBY в READ ONLY:
Соединяемся со STANDBY и выдаем:
SQL> alter database recover managed standby database cancel;
Media recovery complete.
Теперь логи все еще поступают на STANDBY, но она уже не «подкатывается».
SQL> alter database open read only;
Database altered.
Теперь с базой можно работать, но только в режиме чтения.
Перевод STANDBY в PRIMARY:
Соединяемся со STANDBY и выдаем:
SQL> alter database recover managed standby database cancel;
Media recovery complete.
SQL> alter database activate standby database;
Database altered.
SQL> shutdown immediate
ORA-01507: database not mounted
Oracle instance shut down.
SQL> startup
Oracle instance started.
Database mounted.
Database opened.
Пример делался в основном по этой документации.
Готовим файлы init.ora для базы PrimaryDB(pahomway) и StandbyDB(stpahomway).
Пример PrimaryDB(pahomway).
pahomway.__db_cache_size=96468992
pahomway.__java_pool_size=4194304
pahomway.__large_pool_size=4194304
pahomway.__shared_pool_size=58720256
pahomway.__streams_pool_size=0
*.audit_file_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/adump'
*.background_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/home/oracle/oracle/product/10.2.0/oradata/pahomway/control01.ctl','/home/oracle/oracle/product/10.2.0/oradata/pahomway/control02.ctl','/home/oracle/oracle/product/10.2.0/oradata/pahomway/control03.ctl'
*.core_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='pahomway'
*.db_recovery_file_dest='/home/oracle/oracle/product/10.2.0/db_1/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.db_unique_name='pahomway'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=pahomwayXDB)'
*.fal_client='stpahomway'
*.fal_server='pahomway'
*.job_queue_processes=10
*.log_archive_config='dg_config=(pahomway,stpahomway)'
*.log_archive_dest_1='location=/home/oracle/oracle/product/10.2.0/oradata/arch1/ db_unique_name=pahomway'
*.log_archive_dest_2='SERVICE=stpahomway LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stpahomway'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=167772160
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/udump'
Пример StandbyDB(stpahomway).
*.audit_file_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway/adump'
*.background_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/home/oracle/oracle/product/10.2.0/oradata/stpahomway/stpahomway.ctl'
*.core_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_file_name_convert='pahomway','stpahomway'
*.db_name='pahomway'
*.db_recovery_file_dest='/home/oracle/oracle/product/10.2.0/db_1/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.db_unique_name='stpahomway'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=stpahomwayXDB)'
*.fal_client='stpahomway'
*.fal_server='pahomway'
*.job_queue_processes=10
*.log_archive_config='dg_config=(pahomway,stpahomway)'
*.log_archive_dest_1='location=/home/oracle/oracle/product/10.2.0/oradata/arch2/ db_unique_name=stpahomway'
*.log_archive_dest_2='service=pahomway LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pahomway'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.log_file_name_convert='/home/oracle/oracle/product/10.2.0/oradata/arch1/','/home/oracle/oracle/product/10.2.0/oradata/arch2/','/home/oracle/oracle/product/10.2.0/oradata/pahomway/','/home/oracle/oracle/product/10.2.0/oradata/stpahomway/'
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=167772160
*.standby_file_management='auto'
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway/udump'
PrimaryDB - SQL> ALTER DATABASE FORCE LOGGING;
PrimaryDB - SQL> alter database archivelog;
PrimaryDB - делаем активными настройки init.ora
SQL> startup pfile='/home/oracle/oracle/product/10.2.0/db_1/admin/pahomway_last.ora';
PrimaryDB – Делаем оперативные логии для StandbyDB SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 10 2> ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500M;
StandbyDB – создаем файл паролей orapwd file=/…/orapwpahomway password=a entries=4
StandbyDB – Настраиваем листенер и TNS
StandbyDB – создаем папки для архив логов и данных
StandbyDB – стартуем (рестартуем) листенер
lsnrctl stop
lsnrctl start
PrimaryDB - с помощью rman делаем backup RMAN> backup database plus archivelog;
PrimaryDB – SQL> alter database create standby controlfile as '/home/oracle/oracle/product/10.2.0/oradata/stpahomway/stpahomway.ctl';
StandbyDB – делаем восстановление стартуя с подготовленного файла
SQL> startup mount pfile='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway_last.ora';
RMAN> connect target sys/a@stpahomway
RMAN> run {
2> allocate channel d1 type disk;
3> restore database;
4> recover database;
5> }
StandbyDB – запускаем то, шо получилось
SQL> shutdown immediate;
SQL> startup nomount pfile='/home/oracle/oracle/product/10.2.0/db_1/admin/stpahomway_last.ora';
SQL> alter database mount standby database;
SQL> alter database recover managed standby database disconnect from session;
PrimaryDB – проверяем работу SQL> alter system switch logfile;
Дальше не проверял. Но хочется верить в сказку :)
Перевод STANDBY в READ ONLY:
Соединяемся со STANDBY и выдаем:
SQL> alter database recover managed standby database cancel;
Media recovery complete.
Теперь логи все еще поступают на STANDBY, но она уже не «подкатывается».
SQL> alter database open read only;
Database altered.
Теперь с базой можно работать, но только в режиме чтения.
Перевод STANDBY в PRIMARY:
Соединяемся со STANDBY и выдаем:
SQL> alter database recover managed standby database cancel;
Media recovery complete.
SQL> alter database activate standby database;
Database altered.
SQL> shutdown immediate
ORA-01507: database not mounted
Oracle instance shut down.
SQL> startup
Oracle instance started.
Database mounted.
Database opened.
Backup with rman 2
Вариант более автоматизированный :) изменения затронули только файл с командами rman:
run
{
allocate channel c1 device type disk;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/backup/rman_ctrl_%d_%F.bkp';
backup database format '/home/oracle/backup/rman_%d_%U.bkp' plus archivelog format '/home/oracle/backup/rman_arch_%d_%U.bkp';
crosscheck backup;
delete noprompt obsolete redundancy 3;
release channel c1;
}
Описание:
Вах! почти ничем не отличается от описанного раннее. Токмо в конце команды бекапа БД добавили plus archivelog format. Что в переводе означает переключение активного лога и последующая запись всех архив логов в бекап. Ну и добавил удаление старых версий бекапа и ссылок в controlfile на несуществующие файлы. Собсно будет храниться только три последних бекапа.
run
{
allocate channel c1 device type disk;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/backup/rman_ctrl_%d_%F.bkp';
backup database format '/home/oracle/backup/rman_%d_%U.bkp' plus archivelog format '/home/oracle/backup/rman_arch_%d_%U.bkp';
crosscheck backup;
delete noprompt obsolete redundancy 3;
release channel c1;
}
Описание:
Вах! почти ничем не отличается от описанного раннее. Токмо в конце команды бекапа БД добавили plus archivelog format. Что в переводе означает переключение активного лога и последующая запись всех архив логов в бекап. Ну и добавил удаление старых версий бекапа и ссылок в controlfile на несуществующие файлы. Собсно будет храниться только три последних бекапа.
Backup with rman 1
Проверено на vmware : RHEL 4.5 and Oracle 10g.
Решил, что католог использовать не хочу. Хоть он и дает больше возможностей, НО надо ведь еще думать о сохранности и его родимого.
Так как предполагается сделать горячий бекап. Для начала поставим базу в режим archivelog. Если память не отшибло, БД предварительно ставим в mount. Затем выполняем команду alter database archivelog;
Файл запуска rman:
export ORACLE_HOME=/home/oracle/oracle/product/10.2.0/db_1
export RMAN_SCR=/home/oracle/install/setting/t.txt
$ORACLE_HOME/bin/rman target / nocatalog cmdfile $RMAN_SCR
Описание:
Линух штука вредная, поетому лучше подстраховаться и прописать внаглую переменные среды. А то мало ли, не оттуда сделаем.
Раз уж в примере t.txt, значит содежимое энтого файла:
run
{
allocate channel c1 device type disk;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/backup/rman_ctrl_%F.bkp';
backup database format '/home/oracle/backup/rman_%d_%t.bkp';
release channel c1;
}
sql 'alter system archive log current';
run
{
allocate channel c3 device type disk;
backup archivelog all format '/home/oracle/backup/arch/rman_arch_%d_%t.bkp';
release channel c3;
}
Описание:
Указали автоматическое бекапирование controlfile и место куда будет писаться бекап (другими словами - шаблон полного имени).
Заставили сделать бекап, указав куды и с каким именем его следует сделать.
Переключаем текуший лог файл и архивируем его. Нам ведь не нужен горячий бекап без логов.
Делаем бекап всех архивлогов, указав куды и с каким именем его следует сделать.
Решил, что католог использовать не хочу. Хоть он и дает больше возможностей, НО надо ведь еще думать о сохранности и его родимого.
Так как предполагается сделать горячий бекап. Для начала поставим базу в режим archivelog. Если память не отшибло, БД предварительно ставим в mount. Затем выполняем команду alter database archivelog;
Файл запуска rman:
export ORACLE_HOME=/home/oracle/oracle/product/10.2.0/db_1
export RMAN_SCR=/home/oracle/install/setting/t.txt
$ORACLE_HOME/bin/rman target / nocatalog cmdfile $RMAN_SCR
Описание:
Линух штука вредная, поетому лучше подстраховаться и прописать внаглую переменные среды. А то мало ли, не оттуда сделаем.
Раз уж в примере t.txt, значит содежимое энтого файла:
run
{
allocate channel c1 device type disk;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/backup/rman_ctrl_%F.bkp';
backup database format '/home/oracle/backup/rman_%d_%t.bkp';
release channel c1;
}
sql 'alter system archive log current';
run
{
allocate channel c3 device type disk;
backup archivelog all format '/home/oracle/backup/arch/rman_arch_%d_%t.bkp';
release channel c3;
}
Описание:
Указали автоматическое бекапирование controlfile и место куда будет писаться бекап (другими словами - шаблон полного имени).
Заставили сделать бекап, указав куды и с каким именем его следует сделать.
Переключаем текуший лог файл и архивируем его. Нам ведь не нужен горячий бекап без логов.
Делаем бекап всех архивлогов, указав куды и с каким именем его следует сделать.
Подписаться на:
Сообщения (Atom)