范本:使用expdp/impdp克隆生成一个新数据库

考虑:

1. 为什么不用rman/duplicate?

答:磁盘空间不足。源数据库800G,可供新数据库使用的空间只有300G,所以不能用rman/duplicate。

2. 为什么可以用expdp/impdp?

答:因为源数据库的数据文件虽然有800G,但通过查dba_segments,其实际的segments只有不到300G,考虑到每个segment都有一定的空闲空间,实际的数据量一定更小。满足磁盘空间的限制。

3. 有什么缺点?

答:由于导出导入存在时间差,故不能克隆最新的数据。

[@more@]

行动:

1. 导出源数据库数据。(只导出两个application用户,不导出系统用户)

expdp参数文件:

[oracle@azhao-linux rebuild_wmmpmpp1]$ cat expdp_wmmpmp1_WPC_MP.par
userid="/ as sysdba"
SCHEMAS=WPC_MP,TOM
DIRECTORY=ITD_DIR
DUMPFILE=expdp_wmmpmp1_WPC_MP_TOM_20091030_1900.dmp
LOGFILE=expdp_wmmpmp1_WPC_MP__TOM_20091030_1900.log

运行expdp:

export NLS_LANG=american_america.AL32UTF8

echo $NLS_LANG

nohup expdp parfile=expdp_wmmpmp1_WPC_MP.par &

##非常重要:在导出导入之前一定要设置正确的字符集,否则一旦出现错误,只有重建数据库。

##导出的dump文件只有35G,用了两个半小时。说明300G的segment中有大量的空数据块。

2. 准备目标数据库的pfile和password file

3. 准备创建表空间的脚本,表空间的名字要和源数据库一致。另外,由于300G的空闲空间分布在几个卷上,为了保证不把卷撑爆,要计划好哪几个数据文件在哪个卷上。

4. 准备创建空数据库的脚本。

脚本1:(创建空数据库的骨架,用时不超过20分钟)

[oracle@azhao-linux rebuild_wmmpmpp1]$ cat create_db.sql
connect / as sysdba
spool cre8_wmmpmpp1.log
REM set termout off
set echo on

REM
REM Start the instance for wmlmap1 database
REM

startup nomount pfile='/opt/oracle_mppim/product/1020/dbs/initwmmpmpp1.ora'

REM
REM Create the database
REM SYSTEM tablespace configuration guidelines:
REM
REM General-Purpose ORACLE RDBMS 5Mb
REM Additional dictionary for applications 10-50Mb
REM
REM Redo Log File configuration guidelines:
REM
REM Use 3+ redo log files to relieve ``cannot allocate new log...'' waits
REM Use ~100Kb per redo log file per connection to reduce checkpoints
REM Put redo log members on different disks if possible.

create database "wmmpmpp1"
LOGFILE
GROUP 1 (
'/ora/wmmppmpp1/redo1/wmmpmpp1/redo1a.log',
'/ora/wmmppmpp1/redo2/wmmpmpp1/redo1b.log'
) SIZE 500M,
GROUP 2 (
'/ora/wmmppmpp1/redo1/wmmpmpp1/redo2a.log',
'/ora/wmmppmpp1/redo2/wmmpmpp1/redo2b.log'
) SIZE 500M,
GROUP 3 (
'/ora/wmmppmpp1/redo1/wmmpmpp1/redo3a.log',
'/ora/wmmppmpp1/redo2/wmmpmpp1/redo3b.log'
) SIZE 500M,
GROUP 4 (
'/ora/wmmppmpp1/redo1/wmmpmpp1/redo4a.log',
'/ora/wmmppmpp1/redo2/wmmpmpp1/redo4b.log'
) SIZE 500M
archivelog
maxinstances 1
maxlogmembers 2
maxlogfiles 255
maxdatafiles 1024
maxloghistory 453
character set "AL32UTF8"
datafile '/ora/wmmppmpp1/ts1/wmmpmpp1/data/system_dat_01.dbf' SIZE 1000M
extent management local
sysaux datafile '/ora/wmmppmpp1/ts3/wmmpmpp1/data/sysaux_dat_01.dbf' SIZE 4000M
default temporary tablespace new_temp tempfile '/ora/wmmppmpp1/ts3/wmmpmpp1/temp/temp_dat_01.dbf' SIZE 2048M
extent management local uniform. size 1M
undo tablespace undo01 datafile '/ora/wmmppmpp1/ts3/wmmpmpp1/undo/undo01.dbf' SIZE 2000M;

alter database open;

set echo off

spool off

##注意,使用“create database”语句需要在pfile中设置undo_management=auto

脚本2:(创建数据字典等血肉,用时大约一个半小时)

[oracle@azhao-linux rebuild_wmmpmpp1]$ cat create_db_2.sql
connect / as sysdba
spool wmmpmpp1_create_db_2.log
REM set termout off
set echo off

@$ORACLE_HOME/rdbms/admin/catalog
set echo off
@$ORACLE_HOME/rdbms/admin/catproc
@$ORACLE_HOME/rdbms/admin/catblock

-- alter user system temporary tablespace TEMP;
-- alter user sys temporary tablespace TEMP;

connect system/manager
set echo off
@$ORACLE_HOME/rdbms/admin/catdbsyn
set echo off
@$ORACLE_HOME/sqlplus/admin/pupbld

connect /as sysdba
grant select on v_$database to public;

spool off

5. 创建空数据库

依次运行两个脚本:

export $ORACLE_SID=wmmpmpp1

echo $ORACLE_SID

[oracle@azhao-linux rebuild_wmmpmpp1]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Mon Nov 2 02:01:00 2009

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Connected to an idle instance.

SQL> @create_db.sql

SQL> @create_db_2.sql

检查dba_registry,里面只有两个组件,如果都是VALID,数据库就创建成功了。

6. 创建表空间

7. 比照源数据库创建用户和角色(对于impdp,不创建也可以,导入时会自动创建,但是imp必须创建)

8. 比照源数据库授权

9. impdp数据

impdp参数文件:

[oracle@azhao-linux rebuild_wmmpmpp1]$ cat impdp_wmmpmpp1_WPC_MP.par
userid="/ as sysdba"
DIRECTORY=ITD_DIR
DUMPFILE=expdp_wmmpmp1_WPC_MP_TOM_20091030_1900.dmp
LOGFILE=impdp_wmmpmp1_WPC_MP__TOM_20091031.log
FULL=y
PARALLEL=5

运行impdp:

export NLS_LANG=american_america.AL32UTF8

echo $NLS_LANG

nohup impdp parfile=impdp_wmmpmpp1_WPC_MP.par &

impdp导入了大约30G的表,只用了一个小时。然后就一直停在了导入索引上,在两个半小时之后,终于结束了。总共导入了88G的数据,花费了三个半小时。

10. 重启数据库并检验

通过检验dba_objects,导入的数据比源数据库少了4个分区表和12 个分区索引,这是不应该的。经查,原来缺少的对象都是源数据库回收站中的对象。看来expdp导出的时候避开了回收站。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8684388/viewspace-1045262/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8684388/viewspace-1045262/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值