试了一下 DD备份复制裸设备上的数据库,并重命名重建库:以下为步骤:
1.在原库上create pfile 及生成dd 命今
sql>create pfile='/app/oracle/product/10.2.0/db_1/dbs/inittestbk.ora' from spfile;
sql>select 'dd if='||file_name ||' f=/backup/testbk/'||substr(file_name,20,30)||' bs=8k 'from dba_data_files;
sql>select member from v$logfile;
sql>select 'dd if='||member ||' f=/backup/testbk/'||substr(member,20,30)||' bs=8k 'from v$logfile;
sql>select name from v$controlfile;
select 'dd if='||name ||' f=/backup/testbk/'||'control0.dbf bs=8k 'from v$controlfile;
sql>shutdown immediate;
2.在原库上备份目标数据库控制文件
SQL>alter database backup controlfile to trace;
SQL>shutdown immediate;
3. dd 出来裸设备上的数据文件
dd if=/app/oracle/testdb/system01.dbf f=/backup/testbk/system01.dbf bs=8k
dd if=/app/oracle/testdb/undotbs01.dbf f=/backup/testbk/undotbs01.dbf bs=8k
dd if=/app/oracle/testdb/sysaux01.dbf f=/backup/testbk/sysaux01.dbf bs=8k
dd if=/app/oracle/testdb/redo01.dbf f=/backup/testbk/redo01.dbf bs=8k
dd if=/app/oracle/testdb/redo02.dbf f=/backup/testbk/redo02.dbf bs=8k
dd if=/dev/raw/raw6 f=/backup/testbk/control01.dbf bs=8k
dd if=/dev/raw/raw7 f=/backup/testbk/control02.dbf bs=8k
4.修改inittestbk.ora
testbk.__db_cache_size=88080384
testbk.__java_pool_size=4194304
testbk.__large_pool_size=4194304
testbk.__shared_pool_size=67108864
testbk.__streams_pool_size=0
*.audit_file_dest='/app/oracle/admin/testbk/adump'
*.background_dump_dest='/app/oracle/admin/testbk/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/backup/testbk/control01.dbf','/backup/testbk/control02.dbf'
*.core_dump_dest='/app/oracle/admin/testbk/cdump'
*.cursor_sharing='EXACT'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='testbk'
*.job_queue_processes=10
*.log_archive_dest_1='LOCATION=/arch'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.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='/app/oracle/admin/testbk/udump'
5.建密码文件:
$orapwd file=/app/oracle/product/10.2.0/db_1/dbs/orapwtestbk password=oracle entries=10
6.从原库的udump拿出trace的controlfile 修改以作新库重建control file
$export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
$export ORACLE_SID=testbk
$sqlplus "/as sysdba"
SQL> startup nomount
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 75499764 bytes
Database Buffers 88080384 bytes
Redo Buffers 2973696 bytes
SQL> CREATE CONTROLFILE REUSE set DATABASE "TESTBK" RESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/app/oracle/testdb/redo01.dbf' SIZE 190M,
9 GROUP 2 '/app/oracle/testdb/redo02.dbf' SIZE 190M
10 -- STANDBY LOGFILE
11 DATAFILE
12 '/app/oracle/testdb/system01.dbf',
13 '/app/oracle/testdb/undotbs01.dbf',
14 '/app/oracle/testdb/sysaux01.dbf'
15 CHARACTER SET ZHS16GBK
16 ;
7.更改数据库状态为open
alter database open resetlogs;
8.创建TEMP文件
SQL>ALTER TABLESPACE TEMP ADD TEMPFILE '/backup/temp/temp01.dbf' size 500M;
9.. 改global_name
SQL>alter database rename global_name to testbk;
10.修改listener.ora和tnsname.ora文件,以及/etc/oratab
11、重新启动listen服务:lsnrctl reload
附:sydjd的dd备份裸设备v1.0
裸设备是指一个磁盘或者分区,它不包含文件系统,所以一个裸设备只能包含一个文件。
通过操作系统来备份raw设备上的文件,需要注意一些细节问题。下面具体讨论一下。
Backing Up to Raw Devices on UNIX
Unix下备份raw设备,最常用的就是dd命令。
使用dd命令需要制定一些正确的参数,这些参数是基于你的os以及database的。
Unix和Linux下对裸设备的备份是不同的。我们首先来了解三个概念
|
Data |
Explanation |
|
Block size |
也就是bs选项。这个大小是指dd一次拷贝数据大小。这个和oracle的数据块大小是没有关联的,和os也没有关联。 需要注意的是:这个数值的大小影响到你拷贝数据的速度。bs大,拷贝速度会变快。 |
|
Raw offset |
在一些os上,在裸设备上的文件的开头是被os使用的。这些存储空间被叫做raw offset,Oracle不会备份和恢复这些内容(字节)。 Note:1.备份的时候要跳过含有offset的字节。 2.现在的一些新的系统,已经没有offset。 |
|
Size of Oracle block 0 |
在每个oracle文件的开头,os系统放置了一个块叫做block 0。 这个块的大小和其所在数据文件的oracle块大小相同。 一般的oracle 代码不能识别这个块,但是这个块是包含在os上的文件大小里面的。就是说oracle认为datafile1大小为100块,但是os看来,datafile1大小为101块(100+block 0). |
下面来看一下dd的一些参数意义。
|
Options |
Specifies |
|
if |
输入文件的名字,也就是你要读取(备份)的文件 |
|
of |
输出文件的名字,也就是,你要写入的文件 |
|
bs |
用dd拷贝数据的缓存大小(一次拷贝的数据量) |
|
skip |
如果要备份的raw设备存在offset,用来跳过offset。例如,你要备份的raw设备offset大小为64kB,而你设定的bs为8KB,那么你可以指定specify skip=8 ,这样你就可以从64KB的地方开始拷贝。 |
|
seek |
如果你要把数据拷贝到含有offset的raw设备里面,需要设定这个值, 同skip类似。 |
|
count |
你要拷贝的raw设备的block数。主要还是要看你bs的大小。假如你的数据文件含有100个oracle块,oracle块大小为8K,那么你的count就设为100. 也就是说 bs × count = size of your datafile1 当然,count也可以不设定,这样就把整个raw设备都拷贝下来。有空间的浪费。建议设定count大小。 |
因为raw设备可以作为备份的输入文件,也可以作为输出文件,下面给出了不同情况下的参数使用情况。
|
backing up from …….. |
backing up to …….. |
涉及到的dd参数 |
|
<SPAN lang=EN-US style="FONT-FAMILY: 'MS Reference Sans Serif'; mso-bidi-font-size: 10.5pt 来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16728139/viewspace-2083289/ ,如需转载,请注明出处,否则将追究法律责任。
请登录后发表评论
登录
全部评论
|