【Oracle】复制数据库的两种方式

前提:创建数据库空间,创建用户并赋权

一、命令

EXP:数据库的备份命令,主要指对象(表)备份和用户备份.

表备份添加参数:tables=usr.table1,usr.table2,usr.table3;用户备份可以用来复制数据库。

IMP:数据库的恢复命令。

 

将一个数据库的某用户的所有表导到另外数据库的一个用户下面的例子  

exp userid=system/manager owner=username1 file=expfile.dmp

imp userid=system/manager fromuser=username1 touser=username2 ignore=y file=expfile.dmp

 


Microsoft Windows [版本 6.1.7600] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>d:

D:\>cd D:\EXPIMP

D:\EXPIMP>


exp USR/PWD@FROM_DB owner=USR rows=y indexes=y compress=y buffer=65536 feedback=100000 file=db_full.dmp log=db_full_exp.log

imp USR/PWD@TO_DB fromuser=USR touser=USR rows=y commit=y ignore=n file=db_full.dmp log=db_full_imp.log

FROM_DB =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.10)(PORT=1521))
)
(CONNECT_DATA=
(SID=FROM_DB)
(SERVER=DEDICATED)
)
)

TO_DB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TO_DB)
)
)

参数说明

1. ignore参数

 Oracle在恢复数据的过程中,当恢复某个表时,该表已经存在, 就要根据ignore参数的设置来决定如何操作。 若ignore=y,Oracle不执行CREATE TABLE语句,直接将数据 插入到表中,如果插入的记录违背了约束条件,比如主键约束, 则出错的记录不会插入,但合法的记录会添加到表中。 若ignore=n,Oracle不执行CREATE TABLE语句,同时也不会 将数据插入到表中,而是忽略该表的错误,继续恢复下一个表。

 2. indexes参数

在恢复数据的过程中,若indexes=n,则表上的索引不会被恢复 ,但是主键对应的唯一索引将无条件恢复,这是为了保证数据 的完整性。

PS:一般情况下,备份的情况下indexes = n;如果是复制数据库,则indexes = y

  

二、创建数据库结构,同步表记录

1、db_link
create database link FROM_DB.US.ORACLE.COM
connect to USR identified by PWD
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FROM_DB)
)
)
';
/

 

2、Export file for user USR,PL/SQL EXPORT USER OBJECTS(EXCLUED SEQUENCE )

 

3、procedure
CREATE OR REPLACE PROCEDURE IMP_TABLE IS
CURSOR T_CUR IS
select SEGMENT_NAME TABLE_NAME, BYTES
from user_segments@FROM_DB
where segment_type = 'TABLE'
and upper(SEGMENT_NAME) not like '%PLAN_TABLE'
and upper(SEGMENT_NAME) not like '%MICROSOFTDTPROPERTIES'
and upper(SEGMENT_NAME) not like '%TMP'
and upper(SEGMENT_NAME) not like '%BAK'
and upper(SEGMENT_NAME) not like '%LOG'
order by SEGMENT_NAME;
V_SQL VARCHAR2(1000);
irow number := 0;
BEGIN
FOR R_CUR IN T_CUR LOOP
irow := irow + 1;
V_SQL := 'insert into ' || R_CUR.TABLE_NAME || ' SELECT * FROM USR.' ||
R_CUR.TABLE_NAME || '@FROM_DB';
EXECUTE IMMEDIATE V_SQL;
COMMIT;
Dbms_Output.put_line(irow);
END LOOP;
END IMP_TABLE;
/

3.1、stop the trigger

 

4、EXEC IMP_TABLE
declare
begin
IMP_TABLE;
end;
/


5、Export file for user USR,PL/SQL EXPORT SEQUENCE

5.1、start the trigger

 

 


 

 

转载于:https://www.cnblogs.com/illday/archive/2011/12/12/2285276.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、付费专栏及课程。

余额充值