前提:创建数据库空间,创建用户并赋权
一、命令
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