oracle 复制 mysql_【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

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png1、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 )

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png3、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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png4、EXEC IMP_TABLE

declare

begin

IMP_TABLE;

end;

/

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

5.1、start the trigger

你可能感兴趣的:(oracle,复制,mysql)