用户管理的复制数据库
环境:linux
数据库版本:11.2.0.1.0
作者QQ:517706685
大概步骤
1建立备用数据库目录
2从主数据库创建参数文件
3从主数据库中 备份控制文件到trace
4根据参数文件进行修改
5根据备份控制文件进行修改
6主数据库设置开始备份标识
7利用操作系统的命令复制主数据库的数据文件到备用数据库
8主数据库设置结束备份标识
9主数据库切换日志3次
10拷贝主数据库的归档日志到备份数据库目录
11设置备用数据库的ORACLE_SID
12根据创建的参数文件 启动数据库到nomount状态
13创建控制文件
14启动数据库到加载状态
15执行恢复命令
16启动数据到open 重设日志
详细步骤
mkdir–p /opt2/oracle/oradata/demo
mkdir –p /opt2/oracle/pfile
mkdir –p /opt2/oracle/archive_file
mkdir –p /opt2/oracle/flash_recover_area/demo
mkdir –p /opt2/oracle/admin/demo/adump/
1. 在主数据库, 我们的实例叫demo
createpfile=’/opt2/oracle/pfile/initdemo.ora’ from spfile;
2. 编辑initdemo.ora,红色部分是修改的地方
oracle@suse11:/opt2/oracle/pfile> viinitdemo.ora
demo.__db_cache_size=109051904
demo.__java_pool_size=4194304
demo.__large_pool_size=4194304
demo.__oracle_base='/opt/oracle'#ORACLE_BASEset from environment
demo.__pga_aggregate_target=104857600
demo.__sga_target=314572800
demo.__shared_io_pool_size=0
demo.__shared_pool_size=180355072
demo.__streams_pool_size=8388608
*.audit_file_dest='/opt2/oracle/admin/demo/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/opt2/oracle/oradata/demo/control01.ctl','/opt2/oracle/flash_recovery_area/demo/control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='demo'
*.db_recovery_file_dest='/opt2/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/opt2/oracle'
*.dispatchers='(PROTOCOL=TCP)(SERVICE=demoXDB)'
*.log_archive_dest_1='location=/opt2/oracle/archive_file'
*.log_archive_format='archive_%t_%s_%r.arc'
*.nls_date_format='yyyy-mm-dd hh24:mi:ss'
*.open_cursors=300
*.pga_aggregate_target=104857600
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=314572800
*.undo_tablespace='UNDOTBS1'
3. 备份主数据库控制文件到trace
alter database backup control file to trace;
然后在atert.log 中找到刚才备份的跟踪文件路径
例如
cp /opt/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4528.trc/opt2/oracle/oradata/demo/createCtrl.sql
编辑createCtrl.sql。取消一些注释,只保留类似如下
oracle@suse11:/opt2/oracle/oradata/demo>vi createCtl.sql
CREATE CONTROLFILE SETDATABASE "DEMO" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1'/opt2/oracle/oradata/demo/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2'/opt2/oracle/oradata/demo/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3'/opt2/oracle/oradata/demo/redo03.log' SIZE 50M BLOCKSIZE 512
DATAFILE
'/opt2/oracle/oradata/demo/system01.dbf',
'/opt2/oracle/oradata/demo/sysaux01.dbf',
'/opt2/oracle/oradata/demo/undotbs01.dbf',
'/opt2/oracle/oradata/demo/users01.dbf',
'/opt2/oracle/oradata/demo/tgh1_01.dbf',
'/opt2/oracle/oradata/demo/tgh2_01.dbf',
'/opt2/oracle/oradata/demo/tgh2_02.dbf',
'/opt2/oracle/oradata/demo/tgh2_03.dbf',
'/opt2/oracle/oradata/demo/tgh2_04.dbf',
'/opt2/oracle/oradata/demo/tgh1_index_01.dbf'
CHARACTER SET AL32UTF8
;
4. 设置主数据库开始备份
Alter database begin backup;
5. 利用操作系统命令复制数据文件
cp/opt/oracle/oradata/orcl/*.dbf /opt2/oracle/oradata/demo
5. 结束备份
alter database end backup;
6 . 切换日志至少3次
alter systemarchive log current;
6. 拷贝归档日志
cp /opt/oracle/archive_file/* /opt2/oracle/archive_file/
7. 导入ORACLE_SID
export ORACLE_SID=orcl
8. 登录数据库,启动到nomount状态
startup nomount pfile='/opt2/oracle/pfile/initdemo.ora'
9. 创建控制文件
@/opt2/oracle/oradata/demo/createCtl.sql
创建成功后会在/opt2/oracle/oradata/demo生产control01.ctl文件
9. 设定归档日志路径
10. set logsource='/opt/oracle/archive_file'
11. 启动到mount 状态
alter database mount;
12. 执行恢复
recoverdatabase using backup controlfile until cancel;
输入
AUTO
13 . 恢复完成后 按照重设日志打开
Alterdatabase open resetlogs;
最后验证。
有个疑问,很大教程上针对system表空间的恢复要在nomount状态下,而我根本在这个状态下恢复不了,报数据库没有加载的错误,难道是版本的原因,其它版本没有尝试,期待高人解释。