Oracle Study案例之--基于表空间的时间点恢复(TSPITR)
TSPITR(表空间时间点恢复)用于将一个或多个表空间恢复到过去某个时间点的状态,而其他表空间仍然保持现有状态。
TSPITR 相关的概念和术语:
(1) TSPITR (Tablespace Point-In-Time Recover)。TSPITR 是表空间时间点恢复的英文缩写格式,它表示将一个或多个表空间恢复到过去时间点的状态,而其他表空间仍然保持现有状态。
(2) TSPITR 实现方法。当实现表空间时间点恢复时,既可以使用用户管理的表空间时间点恢复方法,也可以使用RMAN 管理的表空间时间点恢复。
(3) DBPITR (Database Point-In-Time Recovery)。DBPITR 是数据库时间点恢复的英文缩写格式,它表示将数据库的所有表空间恢复到过去时间点的状态。注意,DBPITR 只适用于ARCHIVELOG 模式。
(4) 主数据库(Primary Database)。主数据库是指用于存放应用系统数据的Oracle 数据库,也被称为产品数据库或目标数据库。当执行TSPITR 时,主数据库是指包含被恢复表空间的数据库。
(5) 恢复集(Recovery Set)。恢复集是指在主数据库上需要执行 TSPITR 的表空间集合。注意,当在恢复集的表空间上执行TSPITR 时,要求这些表空间必须是自包含的。
(6) 辅助数据库(Auxiliary Database)。辅助数据库是主数据库的一个副本数据库。当执行TSPITR 时,辅助数据库用于将恢复集表空间恢复到过去时间点。注意,辅助数据库的所有物理文件都是从主数据库备份中取得,并且辅助数据库必须包含SYSTEM 表空间、UNDO 表空间以及恢复集表空间的备份文件。
(7) 辅助集(Auxiliary Set)。辅助集是指辅助数据库所需要的、除了恢复集表空间文件之外的其他文件集合。当执行 TSPITR 时,辅助数据库除了需要恢复集表空间的备份文件之外,还需要备份控制文件、SYSTEM 表空间的备份文件、UNDO 表空间的备分文件。
一、TSPITR相关基本概念
什么是TSPITR?
TSPITR实际上是一种时间点恢复,只不过这里的恢复是针对单个表空间而言的,利用这种方法可以将数据库中的某一个或几个非系统表空间恢复到过去的某个时刻而保持其他的表空间不变。
Oracle只有在控制文件、数据文件头、联机日志文件三者的scn都一致的情况才能正常打开数据库,所以我们不可能在需要进行TSPITR的数据库中直接进行恢复,这就牵涉到另外一个概念辅助实例(auxiliary instance)/辅助数据库(auxiliary database)
主数据库、辅助数据库、辅助实例、恢复集、辅助集
1
2
3
4
5
|
主数据库是指需要进行TSPITR的数据库。
辅助数据库是主数据库的一个副本或是其一个子集,用于进行TSPITR,因为TSPITR不能直接在主数据库上进行。
辅助实例对应于辅助数据库的一个实例。
恢复集是指构成需要进行TSPITR的表空间的所有数据文件的备份。
辅助集是指表空间进行恢复所需的其它所有文件,包括system\undo\temp 表空间的备份文件、备份控制文件、归档日志文件、口令文件、参数文件等。
|
案例分析:基于表空间的时间点恢复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
|
1
、测试环境
03
:
57
:
50
SQL> conn scott/tiger
Connected.
03
:
57
:
57
SQL>
03
:
59
:
43
SQL> select *
from
tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
EXCEPTIONS TABLE
LXTB1 TABLE
LXTB2 TABLE
SALGRADE TABLE
SYS_TEMP_FBT TABLE
BONUS TABLE
DEPT TABLE
EMP TABLE
8
rows selected.
03
:
59
:
45
SQL> select table_name,tablespace_name
from
user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
EXCEPTIONS USERS
LXTB1 USERS
LXTB2 LXTBS2
SALGRADE USERS
BONUS USERS
DEPT USERS
EMP USERS
SYS_TEMP_FBT
8
rows selected.
04
:
00
:
08
SQL> select *
from
lxtb2;
ID
----------
1
2
3
4
5
6
7
8
10
11
10
rows selected.
2
、对主库做热备份
04
:
00
:
09
SQL> conn /
as
sysdba
Connected.
04
:
00
:
14
SQL>
04
:
00
:
14
SQL> @/home/oracle/test_hot_bak
04
:
00
:
22
SQL> set feedback off pagesize
0
heading off verify off linesize
100
trimspool
on
echo off time off
***spooling to /disk1/backup/test/hot_cmd.sql
spool /disk1/backup/test/hot_bak/hot_bak.lst
alter system switch logfile;
alter tablespace SYSTEM begin backup;
host cp /u01/app/oracle/oradata/test/system01.dbf /disk1/backup/test/hot_bak
alter tablespace SYSTEM end backup;
alter tablespace RTBS begin backup;
host cp /u01/app/oracle/oradata/test/rtbs01.dbf /disk1/backup/test/hot_bak
alter tablespace RTBS end backup;
alter tablespace SYSAUX begin backup;
host cp /u01/app/oracle/oradata/test/sysaux01.dbf /disk1/backup/test/hot_bak
alter tablespace SYSAUX end backup;
alter tablespace USERS begin backup;
host cp /u01/app/oracle/oradata/test/users01.dbf /disk1/backup/test/hot_bak
alter tablespace USERS end backup;
alter tablespace LOB_16K begin backup;
host cp /u01/app/oracle/oradata/test/lob_16k01.dbf /disk1/backup/test/hot_bak
alter tablespace LOB_16K end backup;
alter tablespace UNDOTBS1 begin backup;
host cp /u01/app/oracle/oradata/test/undotbs1.dbf /disk1/backup/test/hot_bak
alter tablespace UNDOTBS1 end backup;
alter tablespace INDX begin backup;
host cp /u01/app/oracle/oradata/test/indx01.dbf /disk1/backup/test/hot_bak
alter tablespace INDX end backup;
alter tablespace LXTBS1 begin backup;
host cp /u01/app/oracle/oradata/test/lxtbs01.dbf /disk1/backup/test/hot_bak
alter tablespace LXTBS1 end backup;
alter tablespace LXTBS2 begin backup;
host cp /u01/app/oracle/oradata/test/lxtbs2.dbf /disk1/backup/test/hot_bak
alter tablespace LXTBS2 end backup;
archive log list;
spool off;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /disk4/arch/test
Oldest online log sequence
6
Next log sequence to archive
9
Current log sequence
9
3
、备份控制文件,作为备库的controlfile
SQL> alter database backup controlfile to
'/u01/app/oracle/oradata/test2/control01.ctl'
;
SQL> exit
Disconnected
from
Oracle Database 10g Enterprise Edition Release
10.2.
0.1.
0
- Production
With the Partitioning, OLAP
and
Data Mining options
4
、生成pfile 文件
SQL> create pfile
from
spfile;
5
、表被误操作(truncate)
[oracle@work test]$ sqlplus /
as
sysdba;
SQL*Plus: Release
10.2.
0.1.
0
- Production
on
Thu Oct
27
04
:
01
:
49
2011
Copyright (c)
1982
,
2005
, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release
10.2.
0.1.
0
- Production
With the Partitioning, OLAP
and
Data Mining options
04
:
01
:
50
SQL>
04
:
01
:
50
SQL>
insert
into
scott.lxtb2 values (
9
);
1
row created.
04
:
02
:
15
SQL>
insert
into
scott.lxtb2 values (
12
);
1
row created.
04
:
02
:
17
SQL>
insert
into
scott.lxtb2 values (
13
);
1
row created.
04
:
02
:
19
SQL> commit;
Commit complete.
04
:
02
:
21
SQL> alter system switch logfile;
System altered.
04
:
02
:
39
SQL> /
System altered.
04
:
02
:
40
SQL> /
System altered.
04
:
02
:
41
SQL> truncate table scott.lxtb2;
Table truncated.
04
:
02
:
50
SQL> select *
from
scott.lxtb2;
no rows selected
04
:
02
:
56
SQL> !
6
、生成备库的pfile 文件(inittest2.ora)和备库口令文件
[oracle@work dbs]$ orapwd file=orapwtest2 password=oracle entries=
3
force=y
[oracle@work hot_bak]$ cp $ORACLE_HOME/dbs/inittest.ora $ORACLE_HOME/dbs/inittest2.ora
--------备库pfile 文件
[oracle@work dbs]$ cat inittest2.ora
test.__db_cache_size=
251658240
test.__java_pool_size=
4194304
test.__large_pool_size=
4194304
test.__shared_pool_size=
150994944
test.__streams_pool_size=
0
*.audit_trail=
'NONE'
*.background_dump_dest=
'$ORACLE_BASE/admin/test/bdump'
*.core_dump_dest=
'$ORACLE_BASE/admin/test/cdump'
*.db_16k_cache_size=
12582912
*.db_4k_cache_size=
12582912
*.db_block_size=
8192
*.db_cache_size=30M#DEMO
*.db_file_multiblock_read_count=
16
*.db_name=
'test'
*.db_recovery_file_dest=
'/disk1/flash/test'
*.db_recovery_file_dest_size=
2147483648
*.fast_start_mttr_target=
900
*.fast_start_parallel_rollback=
'HIGH'
*.log_archive_dest_1=
'location=/disk4/arch/test'
*.log_archive_dest_2=
''
*.log_archive_format=
'arch_%t_%s_%r.log'
*.log_checkpoints_to_alert=TRUE
*.nls_date_format=
'yyyy-mm-dd hh24:mi:ss'
*.O7_DICTIONARY_ACCESSIBILITY=FALSE
*.optimizer_mode=
'choose'
*.parallel_threads_per_cpu=
4
#SMALL
*.pga_aggregate_target=
10485760
*.query_rewrite_enabled=
'true'
*.query_rewrite_integrity=
'trusted'
*.recovery_parallelism=
4
*.remote_login_passwordfile=
'EXCLUSIVE'
*.resource_limit=TRUE
*.sga_max_size=
440401920
*.sga_target=418m
*.shared_pool_size=100M#DEMO
*.star_transformation_enabled=
'true'
*.undo_management=
'auto'
*.undo_tablespace=
'UNDOTBS1'
*.user_dump_dest=
'$ORACLE_BASE/admin/test/udump'
*.utl_file_dir=
'/home/oracle/logmnr'
---------添加以下内容
*.control_files=
'/u01/app/oracle/oradata/test2/control01.ctl'
db_unique_name = test2
db_file_name_convert=(
'/u01/app/oracle/oradata/test'
,
'/u01/app/oracle/oradata/test2'
)
log_file_name_convert=(
'/u01/app/oracle/oradata/test'
,
'/u01/app/oracle/oradata/test2'
,
'/disk1/oradata/test'
,
'/disk1/oradata/test2'
)
7
、拷贝主库备份数据文件到备库目录下
[oracle@work hot_bak]$ mkdir /u01/app/oracle/oradata/test2
[oracle@work hot_bak]$ mkdir /disk1/oradata/test2
[oracle@work test]$ cd /disk1/backup/test/hot_bak/
[oracle@work hot_bak]$ ls
hot_bak.lst indx01.dbf lob_16k01.dbf lxtbs01.dbf lxtbs2.dbf rtbs01.dbf sysaux01.dbf system01.dbf undotbs1.dbf users01.dbf
[oracle@work hot_bak]$ cp *.dbf /u01/app/oracle/oradata/test2/
8
、启动备库到nomount
export ORACLE_SID=test2
[oracle@work hot_bak]$ export ORACLE_SID=test2
[oracle@work hot_bak]$ !sql
sqlplus /
as
sysdba;
SQL*Plus: Release
10.2.
0.1.
0
- Production
on
Thu Oct
27
04
:
05
:
28
2011
Copyright (c)
1982
,
2005
, Oracle. All rights reserved.
Connected to an idle instance.
04
:
05
:
29
SQL>
04
:
05
:
29
SQL> startup nomount pfile=$ORACLE_HOME/dbs/inittest2.ora
ORACLE instance started.
Total System Global Area
440401920
bytes
Fixed Size
1219904
bytes
Variable Size
113246912
bytes
Database Buffers
322961408
bytes
Redo Buffers
2973696
bytes
8
、启动备库到mount状态
04
:
05
:
43
SQL> alter database mount clone database;
Database altered.
04
:
06
:
25
SQL> col name
for
a50
04
:
06
:
32
SQL> select name ,file# ,status
from
v$datafile;
NAME FILE# STATUS
-------------------------------------------------- ---------- -------
/u01/app/oracle/oradata/test2/system01.dbf
1
SYSOFF
/u01/app/oracle/oradata/test2/rtbs01.dbf
2
OFFLINE
/u01/app/oracle/oradata/test2/sysaux01.dbf
3
OFFLINE
/u01/app/oracle/oradata/test2/users01.dbf
4
OFFLINE
/u01/app/oracle/oradata/test2/lob_16k01.dbf
5
OFFLINE
/u01/app/oracle/oradata/test2/lxtbs01.dbf
6
OFFLINE
/u01/app/oracle/oradata/test2/lxtbs2.dbf
7
OFFLINE
/u01/app/oracle/oradata/test2/undotbs1.dbf
9
OFFLINE
/u01/app/oracle/oradata/test2/indx01.dbf
14
OFFLINE
9
rows selected.
10
、将数据文件联机
04
:
09
:
17
SQL> alter database datafile
1
online;
Database altered.
04
:
09
:
24
SQL> alter database datafile
2
online;
Database altered.
04
:
09
:
26
SQL> alter database datafile
3
online;
Database altered.
04
:
09
:
28
SQL> alter database datafile
4
online;
Database altered.
04
:
09
:
30
SQL> alter database datafile
5
online;
Database altered.
04
:
09
:
32
SQL> alter database datafile
6
online;
Database altered.
04
:
09
:
34
SQL> alter database datafile
7
online;
Database altered.
04
:
09
:
36
SQL> alter database datafile
9
online;
Database altered.
04
:
09
:
40
SQL> alter database datafile
14
online;
Database altered.
04
:
09
:
42
SQL> select name ,file# ,status
from
v$datafile
04
:
09
:
47
2
;
NAME FILE# STATUS
-------------------------------------------------- ---------- -------
/u01/app/oracle/oradata/test2/system01.dbf
1
SYSTEM
/u01/app/oracle/oradata/test2/rtbs01.dbf
2
ONLINE
/u01/app/oracle/oradata/test2/sysaux01.dbf
3
ONLINE
/u01/app/oracle/oradata/test2/users01.dbf
4
ONLINE
/u01/app/oracle/oradata/test2/lob_16k01.dbf
5
ONLINE
/u01/app/oracle/oradata/test2/lxtbs01.dbf
6
ONLINE
/u01/app/oracle/oradata/test2/lxtbs2.dbf
7
ONLINE
/u01/app/oracle/oradata/test2/undotbs1.dbf
9
ONLINE
/u01/app/oracle/oradata/test2/indx01.dbf
14
ONLINE
9
rows selected.
11
、在备库上做基于时间点的database recover(时间点就是truncate时的时间点,可以用logmnr找出)
04
:
09
:
48
SQL> recover database until time
'2011-10-27 04:01:50'
using backup controlfile;
ORA
-00279
: change
1354493
generated
at
10
/
27
/
2011
04
:
00
:
23
needed
for
thread
1
ORA
-00289
: suggestion : /disk4/arch/test/arch_1_9_765501215.log
ORA
-00280
: change
1354493
for
thread
1
is
in
sequence #
9
04
:
10
:
30
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.
12
、open database 查看恢复
04
:
10
:
37
SQL> alter database open resetlogs;
Database altered.
04
:
10
:
58
SQL> select *
from
scott.lxtb2;
ID
----------
1
2
3
4
5
6
7
8
10
11
10
rows selected.
04
:
11
:
30
SQL>
---------------------恢复成功
13
、将恢复后的表空间导出(lxtbs2 tablespace)
[oracle@work data]$ exp userid=\'sys/oracle
as
sydba\' point_in_time_recover=y tablespaces=lxtbs2 file=lxtbs2.dmp
Export: Release
10.2.
0.1.
0
- Production
on
Thu Oct
27
04
:
15
:
34
2011
Copyright (c)
1982
,
2005
, Oracle. All rights reserved.
EXP
-00004
: invalid username
or
password
Username: sys
as
sysdba
Password:
Connected to: Oracle Database 10g Enterprise Edition Release
10.2.
0.1.
0
- Production
With the Partitioning, OLAP
and
Data Mining options
Export done
in
US7ASCII character set
and
AL16UTF16 NCHAR character set
server uses ZHS16GBK character set (possible charset conversion)
Note: table data (rows) will
not
be exported
About to export Tablespace Point-
in
-time Recovery objects...
For tablespace LXTBS2 ...
. exporting cluster definitions
. exporting table definitions
. . exporting table LXTB2
EXP
-00091
: Exporting questionable statistics.
. exporting referential integrity constraints
. exporting triggers
. end point-
in
-time recovery
Export terminated successfully
with
warnings.
[oracle@work data]$
14
、将表空间导入到主库
----------将主库表空间脱机 test (主库)
04
:
13
:
45
SQL> alter tablespace lxtbs2 offline;
Tablespace altered.
--------拷贝备库表空间datafile 到主库目录下
[oracle@work data]$ cp /u01/app/oracle/oradata/test2/lxtbs2.dbf /u01/app/oracle/oradata/test
[oracle@work data]$ export ORACLE_SID=test
-------------导入到主库
[oracle@work data]$ imp userid=\'sys/oracle
as
sysdba\' point_in_time_recover=y file=lxtbs2.dmp ignore=y
Import: Release
10.2.
0.1.
0
- Production
on
Thu Oct
27
04
:
38
:
29
2011
Copyright (c)
1982
,
2005
, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release
10.2.
0.1.
0
- Production
With the Partitioning, OLAP
and
Data Mining options
Export file created by EXPORT:V10
.02.01
via conventional path
About to
import
Tablespace Point-
in
-time Recovery objects...
import
done
in
US7ASCII character set
and
AL16UTF16 NCHAR character set
import
server uses ZHS16GBK character set (possible charset conversion)
. importing SYS's objects
into
SYS
. importing SCOTT's objects
into
SCOTT
. . importing table
"LXTB2"
. importing SYS's objects
into
SYS
Import terminated successfully without warnings
15
、验证
04
:
30
:
39
SQL> alter tablespace lxtbs2 online;
Tablespace altered.
04
:
38
:
51
SQL> select *
from
scott.lxtb2;
ID
----------
1
2
3
4
5
6
7
8
10
11
10
rows selected.
-----------数据文件恢复到truncate 之前
|