ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DD备份复制裸设备上的数据库,并重命名重建库及DD的使用

DD备份复制裸设备上的数据库,并重命名重建库及DD的使用

Linux操作系统 作者:godymoon 时间:2016-04-18 13:42:12 0 删除 编辑

试了一下 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
   

主要内容:

1.                              UNIX使用dd对裸设备进行备份

2.                              dd命令详解

3.                              确定裸设备数据文件大小,验证备份(2个工具)

Making User-Managed Backups to Raw Devices

裸设备是指一个磁盘或者分区,它不包含文件系统,所以一个裸设备只能包含一个文件。

通过操作系统来备份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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-08-20

  • 博文量
    7
  • 访问量
    11508