oracle数据库远程不落地导入本地数据库 ---2013.09.29
1. 在要导入数据库的本地主机创建exp(dp)、imp(dp)目录,此处我用的是impdp/expdp:
SQL> create directory dpdump as '/oradata/dpdump';
Directory created.
SQL> select * from dba_directories;查看目录
SQL> grant read,write on directory dpdump to vhfs;
Grant succeeded.
2. 在要导入数据库的本地主机创建dblink
1.创建dblink的第一种方式,是在本地数据库tnsnames.ora文件中配置了要远程访问的数据库(即数据库导入的源端数据库的tns)。
增加tnsnames.ora文件远程数据库的tnsnames.ora的信息如下:
ORATEST1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oratest1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oratest1)
)
) 上面这个是本地主机原来的tnsnames.ora文件
Oratest2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oratest2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oratest2)
)
) 后来增加的远程数据库tnsnames.Ora的文件
在本地主机上开始创建dblink,在开始创建前要保证本地tnsping oratest2(远程数据库tns) 能通。 (本例中我的数据库实例名和主机名是一样的,这个根据自己环境的实际情况来填写)
以sys用户登录
SQL>create public database link
oratest2_rt connect to oracle identified by oracle using ‘oratest2'
其中oratest2_rt是你创建的dblink名字,oratest2是远程数据库的实例名(instance),oracle/oracle是登录到远程数据库的用户/密码。然后在本地数据库中通过dblink访问远程数据库'oratest2'中oracle.tech表sql语句如下所示
SQL> select * from oracle.tech@orc6_rt;
NAME ID PROJECT
---------- -------------------- ----------
白雪 55 钢琴
黎明 22 化学
大猫 29 生物
小猫 18 语文
2.创建dblink的第二种方式,是在本地数据库tnsnames.ora文件中没有配置要访问的远程数据库,
create database link oratest2_rt
connect to oracle identified by oracle
using ‘(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.106)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oratest2)
)
)';
第二种是把第一种配置在tnsnames.ora文件中的信息,直接放在创建dblink语句后面。第一种情况tnsnames.ora文件中信息如下:
Oratest2=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oratest2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oratest2)
)
)
删除及创建DBlink
SQL> drop public database link oratest2_rt;
Database link dropped.
SQL> create public database link
oratest2_rt connect to oracle identified by oracle using 'oratest2';
3. 根据以上步骤创建数据库连接完成后,可以做下面的操作
本地数据库操作远程数据库不落地导入数据:
impdp oracle/oracle DIRECTORY=dpdump NETWORK_LINK=oratest2_rt schemas=oracle
oracle/oracle是远程数据库的用户名和密码,DIRECTORY=dpdump是expdp、impdp目录(此处的目录在不落地导入的时候,只是作为一个中转站,不会有数据存在),NETWORK_LINK=oratest2_rt是DBlink,schemas=oracle是要导入的用户。
注意:
一、在本地数据库下要建立好与远程数据库同样数量和大小的数据文件,然后创建同样的用户oracle并授权,
命令如下:
Sys登录
SQL>create user oracle identified by oracle
default tablespace MGRVHFSTBSDEF 此处是设置默认表空间。
temporary tablespace TEMP 此处是设置默认临时表空间。
profile DEFAULT
quota unlimited on mgrvhfstbs2005 此处是设置可操作的其他表空间
quota unlimited on mgrvhfstbsdef; 此处是设置可操作的其他表空间
用户授权
SQL>grant connect to oracle;
SQL>grant dba to oracle;
SQL>grant unlimited tablespace to oracle;
二、如果用户已存在,则删除用户下所有数据,并重建用户。
1.删除用户
SQL> drop user oracle cascade;
2.创建用户
SQL>create user oracle identified by oracle
default tablespace MGRVHFSTBSDEF 此处是设置默认表空间。
temporary tablespace TEMP 此处是设置默认临时表空间。
profile DEFAULT
quota unlimited on mgrvhfstbs2005 此处是设置可操作的其他表空间
quota unlimited on mgrvhfstbsdef; 此处是设置可操作的其他表空间
用户授权
SQL>grant connect to oracle;
SQL>grant dba to oracle;
SQL>grant unlimited tablespace to oracle;