expdp network_link 命令备份远程主机上oracle 11g数据库
这两天发现有一台服务器密码被修改不能远程登录,但数据库和服务运行正常,也能访问。
运维部决定将数据库备份出来然后前去机房重启修改密码。
因为之前有用expdp/impdp导出10g数据库的经验,完整导出速度非常快。固这次决定试试能不能用该命令远程导出版本为11g的数据库。网上查了一下改命令的参数,发现network_link方式可行。
首先,局域网本地有一台测试服务器上装有oracle10g数据库,通过在10g上配 database link连接到远程11g数据库,这里就出现了问题-新建后不能访问后,查出原因为oracle 10g建DB_link连接11g时用户密码需要加双引号(正确操作是在配有远程数据库TNS前提下 Create Database Link link_ora94 Connect To username Identified By "password" Using 'ora94';),测试连接正常。
保证两边登录的用户都有DBA权限,OK,cmd执行expdp命令,艹,报错! 大致内容是这样:
ORA-39001: 参数值无效。
ORA-39169: 10.2.0.1.0 的本地版本不能与 11.2.0.1.0 的远程版本一起使用。
判断为版本不一致导致。所以又开始在本地装一个11g数据库,装好后丫的又出现问题:发现PL/SQL不能登录(登录为XX角色 的选项不见了),又开始查找原因,网上解释说32位PL/SQL不能支持64为Oracle 11g,无语,只能再在本地装一个32位的11g客户端。配置好后能正常打开,继续新建DBA用户->新建database link 测试能正常访问。
终于到重头戏了。cmd执行远程导出命令:expdp test_dba/test_dba@orcl directory=EXP_DIR dumpfile=full0605.dmp logfile=full0605.log full=y network_link=link_ora94 最后一个潇洒的回车!
对于数据的导出,导入。对于exp/imp可以实现把远程数据导入到客户端,但是功能没有expdp/impdp强大
对于expdp/impdp功能很强大,但是对于导出的数据只能是在服务端。下面我们就基于通过expdp结合dblink
把数据直接导出到本地 下面使用导出
如果空间允许建议导出到服务器
# 对于orac_remote是一个本地命名,可以通过netca进行配置,或者直接修改相关配置文件
# 需要保持orac_remote的system用户是open状态,并且密码是正确的
# 可以通过 select * from scott.emp@to_orac_remote 进行测试,如果不成功,需要检查权限和用户已经命名空间orac_remote
1 创建dblink 连接
create database link to_orac_remote
connect to system identified by gpecnew using 'orac_remote'
2 创建directory目录
create directory backup as '/backup'
grant read,write on directory backup to system
3 编写expdp的parfile参数文件 scott.par
userid=system/root
directory=backup
dumpfile=scott.dump
logfile=scott.log
schemas=scott
network_link=to_orac_remote
4 执行命令导出到本地
expdp parfile=scott.par
5 导入到本地
(测试的时候先在本地删除scott用户以及所有的表 drop user scott cascade)
impdp system/root directory=backup dumpfile=scott.dump logfile=scott2.log
(expdp不支持网络链来加载long"保存文本类型"列,exp支持long的导出导入)
SQL> create user test identified by test;
SQL> grant dba to test;
-->创建目录
SQL> select DIRECTORY_NAME,DIRECTORY_PATH from dba_directories where directory_name='DUMP_DIR';
OWNER DIRECTORY_NAME DIRECTORY_PATH
-----------------------------------------------------------------------------------------------------------------------------------------------------
SYS DUMP_DIR E:\dump_dir
SQL> create public database link kfdb7 connect to 用户 identified by "密码" using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = XX.XX.XX.XX)(PORT = 1521端口号))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SID ) ) )';
已连接。
SQL> select * from tab;
未选定行
ORA-39200: 链接名称 "kfdb5" 无效。
ORA-02019: 未找到远程数据库的连接说明
具体解释:
Use the CREATE DATABASE LINK statement to create a database link. A database link is a schema object in one database that enables you to access objects on another database. The other database need not be an Oracle Database system. However, to access non-Oracle systems you must use Oracle Heterogeneous Services.
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
SYS_IMPORT_TABLE_01 TABLE
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
SYS_IMPORT_TABLE_01 TABLE -->主表 在完成后数据库会自动删除主表(导出失败则否)
BASE_DICT TABLE
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BASE_DICT TABLE
SQL> select count(*) from base_dict;
----------
683
之前的export命令直接使用exp@remotedb即可实现远程数据的导出,expdp命令稍微麻烦一些,需要使用db link并建相关目录,简单过程如下
1,修改tnsnames.ora
HRTEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.×.×)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = HRTESTDB)
)
)
2.在客户端数据库创建DATABASE LINK连接要导出数据的服务端。
SQL> create public database link HRTEST connect to system identified by × using 'HRTEST';
Database link created.
3,建目录,并给相关权限
create or replace directory exp_dir as '/data/expdata/';
grant read,write on directory dir to system;
4, 导出数据此处使用clinet端的用户,开始导出数据
export ORACLE_SID=ora11g
expdp system/× network_link=HRTEST directory=exp_dir dumpfile=×.dmp schemas=×
1、连接
sqlplus/nolog
conn sys/manager@orcl as sysdba
sqlplus sys/manager@orcl as sysdba
2、创建目录
create directory dir_test as '/temp';
select * from dba_directories;
drop directory dir_test;
3、授权
grant read,write on directory dir_test to scott;
4、建立数据链路,连接远程计算机
select * from global_name@yc_orcl;
create public database link yc_orcl
connect to git_cms_test identified by git_cms_test_dba
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.101.82.233)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl)
(SERVER = orcl)
)
)';
select count(*) from dual@yc_orcl
dev_orcl =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.101.82.233)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl)
(SERVER = orcl)
)
)
5、导出数据。
expdp sys/manager network_link=yc_orcl directory=aa dumpfile='jbpm4_20170919.dmp' logfile='jbpm4_20160919.log' TABLES=(JBPM4_DEPLOYMENT,JBPM4_PROPERTY,JBPM4_SWIMLANE,JBPM4_TASK,JBPM4_VARIABLE)