oracle复制数据库

准备两台设备,以我的为例一台source  ip:192.168.3.66和一台duplicate ip:192.168.3.77

1》基于备份集复制数据库,目录结构都一样(active database网络)

1.在duplicate端检查有没有亚参文件(如果没有的话就创建)

cd $ORACLE_HOME/dbs

touch dummy.ora

编辑vi dummy.ora添加

db_name='prod'

2.在source端复制一个口令文件(前提是在source有orapwprod口令文件,或者自己在duplicate自己创建一个)

scp $ORACLE_HOME/dbs/orapwprod 192.168.3.77:$ORACLE_HOME/dbs

3.检查duplicate必要的文件目录(如果没有创建)

mkdir -p /u01/admin/prod/adump
mkdir -p /u01/flash_recovery_area
mkdir -p /u01/arch/prod
mkdir -p /u01/oracle/dbs
mkdir -p /u01/oradata/prod

4.配置监听器source(可静态可动态)和duplicate(静态):

两端的tns一样如下:

VBOX77 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.77)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = prod)
)
)

VBOX66 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.66)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = prod)
)
)

5.检查两端的连通性:

两边检查如下

sqlplus sys/oracle@vbox66 as sysdba

sqlplus sys/oracle@vbox77 as sysdba

6.在duplicate端重新登录sys用户sqlplus / as sysdba

SYS@prod>startup pfile=/u01/oracle/dbs/dummy.ora nomount

7.在source端

rman target sys/oracle@vbox66 auxiliary sys/oracle@vbox77

RMAN> duplicate target database to prod from active database spfile nofilenamecheck;

8.完成检验。


 

 2》基于备份集复制数据库,目录结构不一样(active database网络)

1.在duplicate端检查有没有亚参文件(如果没有的话就创建)

cd $ORACLE_HOME/dbs

touch dummy.ora

编辑vi dummy.ora添加

db_name='auxprod'(这里我们换一个实例名)

注意:还要把.bash_profile中的ORACLE_SID实例名改成auxprod,然后生效。

2.在source端复制一个口令文件(前提是在source有orapwprod口令文件,或者自己在duplicate自己创建一个)

scp $ORACLE_HOME/dbs/orapwprod 192.168.3.77:$ORACLE_HOME/dbs

改口令名:mv orapwprod orapwauxprod

3.

因为是基于不同目录,所以在root下在新建一个目录/u02

mkdir /u02

chown -R oracle:oinstall /u02              ------如果这里不授权在后面会遇到权限问题

创建新目录:

mkdir -p /u02/arch1                             ----放归档

mkdir -p /u02/admin/auxprod/adump   -----审计文件

mkdir -p /u02/oradata/auxprod            ---放控制文件,数据文件等

4.配置监听器和tns(注意1》中与相同目录配置的区别)

duplicate端:

配置监听器 内容如下:

[oracle@wjm admin]$ vi listener.ora

# listener.ora Network Configuration File: /u01/oracle/network/admin/listener.ora

# Generated by Oracle configuration tools.

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = wjm)(PORT = 1521))

    )

  )

 

ADR_BASE_LISTENER = /u01

SID_LIST_LISTENER =

    (SID_DESC =

        (GLOBAL_DBNAME= auxprod)

        (ORACLE_HOME = /u01/oracle)

        (SID_NAME = auxprod)

      )

)

重启监听

lsnrctl stop

lsnrctl start

 

配置文件tnsnames.ora 内容如下:

[oracle@wjm admin]$ vi tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/oracle/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

 

vbox66 =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.66)(PORT = 1521))

    )

    (CONNECT_DATA =

        (SERVER = DEDICATED)

      (SERVICE_NAME = prod)

    )

  )

auxprod =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.77)(PORT = 1521))

    )

    (CONNECT_DATA =

    (SERVER = DEDICATED)

      (SERVICE_NAME = auxprod)

    )

  )

5.检查两端的连通性:

两边检查如下

sqlplus sys/oracle@vbox66 as sysdba

sqlplus sys/oracle@vbox77 as sysdba

6.在duplicate端重新登录sys用户sqlplus / as sysdba

SYS@prod>startup pfile=/u01/oracle/dbs/dummy.ora nomount

7.在source端

DUPLICATE TARGET DATABASE
TO auxprod
FROM ACTIVE DATABASE
SPFILE
SET DB_NAME 'auxprod'
SET LOG_ARCHIVE_DEST_1='location=/u02/arch1'
SET CONTROL_FILES=
'/u02/oradata/auxprod/control01.ctl',
'/u02/oradata/auxprod/control02.ctl'
SET AUDIT_FILE_DEST='/u02/admin/auxprod/adump'
SET DB_FILE_NAME_CONVERT '/u01/oradata/prod','/u02/oradata/auxprod'
SET LOG_FILE_NAME_CONVERT '/u01/oradata/prod','/u02/oradata/auxprod'
NOFILENAMECHECK;

8.完成检验。

博主当时配置不同目录复制库遇到的错误:

1.在.bash_profile中ORACLE_SID没有改

2.口令文件命名错误

3.

ERROR:
ORA-09925: Unable to create audit trail file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 9925
ORA-01075: you are currently logged on

授权问题重新给/u01和/u02授权

chown -R oracle:oinstall /u01

chown -R oracle:oinstall /u02

注:在一个数据库上也可以复制方法同上。


3》在上面是基于备份集的复制,接下来是基于备份来复制库

基于备份来复制一个数据库
在原来的source设备上做一个全备+归档备份到/home/oracle/myrman
将source设备上的全备scp到另外一个设备duplicate上/home/oracle/rman
在source设备上select member from v$logfile;中的日志复制到另一个duplicate设备/home/oracle/rman
将duplicate中.bash_profile文件ORALCE_SID改为auxprod
在duplicate设备中打开rman target/
startup nomount;(提示缺少spfile文件)
--打开/u01/flash_recovery_area找到文件
restore spfile from '/home/oracle/rman/o1_mf_s_951945765_ds0no68m_.bkp';
startup force nomount;
连接SYS@auxprod>
show parameter controlfile
alter system set control_files='/u03/oradata/auxprod/control01.ctl','/u03/oradata/auxprod/control02.ctl','/u03/oradata/auxprod/control03.ctl' scope=spfile;
然后再rman中
restore controlfile from '/home/oracle/rman/o1_mf_s_951945765_ds0no68m_.bkp';
alter database mount;
catalog start with '/home/oracle/rman'
在source中批处理后执行
select 'set newname for datafile '||''''||' to '||''''||replace(name,'/u02/oradata/auxprod/','/u03/oradata/auxprod/')||''';' from v$datafile;
set newname for datafile '/u02/oradata/auxprod/' to '/u03/oradata/auxprod/system01.dbf';
set newname for datafile '/u02/oradata/auxprod/' to '/u03/oradata/auxprod/sysaux01.dbf';
set newname for datafile '/u02/oradata/auxprod/' to '/u03/oradata/auxprod/undotbs01.dbf';
set newname for datafile '/u02/oradata/auxprod/' to '/u03/oradata/auxprod/users01.dbf';
set newname for datafile '/u02/oradata/auxprod/' to '/u03/oradata/auxprod/example01.dbf';
alter database rename file '/u02/oradata/auxprod/redo03.log' to '/u03/oradata/auxprod/redo03.log';
alter database rename file '/u02/oradata/auxprod/redo02.log' to '/u03/oradata/auxprod/redo02.log';
alter database rename file '/u02/oradata/auxprod/redo01.log' to '/u03/oradata/auxprod/redo01.log';

restore database;
recover database;
alter database open resetlogs;

 

转载于:https://www.cnblogs.com/wjmbk/p/7858146.html

复制,顾名思义就是将数据库中的数据拷贝到不同物理地点的数据库中。 在很多生产环境中,经常遇到一些大量得数据,这些数据只用作查询统计功能。例如:历史告警,历史性能指标,历史事件,等等。这种数据的特点是:只读不写,数据量相当大,一旦查询大结果集的数据时,对数据库的IO,内存缓存占用相当大,会严重影响同一个数据库的其他会话的操作,表现为整个数据库反应迟缓,业务功能不可用。采用复制技术后,将这些大型数据复制到另外一个数据库中,对这些大数据的查询统计操作放在另外的一台数据库服务器上进行,即使受影响,也只是影响局部的查询统计功能,其他正常的业务处理不受影响。 但是,使用复制技术的话,意味着一个系统中,至少存在两个数据库(集群的数据库也当成一个数据库),对应的应用程序也需要建立多个数据库连接,能够根据业务需要,访问不同的数据库ORACLE数据库自身提供有复制功能,只需要进行配置即可实现。 ORACLE提供有三种复制技术: 高级复制(Advanced Replication) 流复制(Streams Replication) 备库(Dataguard) 备库的方式,就是数据库数据库的备份方式,主要是解决容灾的,不讨论此话题。 流复制主要是利用ORACLE的归档日志,进行增量备份来实现的,不仅可以配置只复制某些表,还可以配置仅复制某些表上的ddl或dml。可以复制到表,用户,数据库级别。 高级复制主要是基于触发器的原理来触发数据同步的,因此,高级复制无法实现用户,数据库级别的对象复制,只能做些表、索引和存储过程的复制。 如果出于容灾整个数据库的考虑,高级复制相当复杂,而且并不一定能做好,流复制的配置相对简单。流复制是后来产生的复制技术,是基于日志挖掘技术实现的,对数据库的影响较低。但在稳定性方面较差,实时性没有高级复制强(因为高级复制是基于触发器的)。如果系统意外的话,流复制的恢复将会需要较长时间,特别是意外时间越长,恢复时间成倍增长。 下面使用相同的环境,分别对两种复制功能进行配置介绍,并进行性能压力测试比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值