考虑:
1. 为什么不用rman/duplicate?
答:磁盘空间不足。源数据库800G,可供新数据库使用的空间只有300G,所以不能用rman/duplicate。
2. 为什么可以用expdp/impdp?
答:因为源数据库的数据文件虽然有800G,但通过查dba_segments,其实际的segments只有不到300G,考虑到每个segment都有一定的空闲空间,实际的数据量一定更小。满足磁盘空间的限制。
3. 有什么缺点?
答:由于导出导入存在时间差,故不能克隆最新的数据。
行动:
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-617947/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8684388/viewspace-617947/