expdp命令远程备份

来源:互联网 发布:51vv直播软件 编辑:程序博客网 时间:2024/05/18 22:51

expdp/impdp属于服务端工具, 它们生成的文件默认是存放在服务端的。如何能使目标机器上expdp备份出来服务器上的文件了?要使用expdp命令远程备份则要使用到数据库链接,首先了解数据库链接的相关知识。

 数据库链接(database link):

一个数据库链接是架构在一个数据库对象数据库,使你能够在另一个访问对象。它是用来方便一个数据库中访问另一个数据库的(包括本地和远程),在本地数据库中建立的连接只是连到别的数据库的快捷方式。

创建dblink一般有两种方式,不过在创建dblink之前用户必须有创建dblink的权限。想知道有关dblink的权限,以sysdba角色登录到本地数据库:

select*from user_sys_privs t where t.privilege like upper(‘%link%’);

expdp命令远程备份

可以看出在数据库中dblink有三种权限CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了),CREATE PUBLIC DATABASE LINKpublic表示所创建的dblink所有用户都可以使用),DROP PUBLIC DATABASE LINK。在sysdba 角色下,把CREATE PUBLIC DATABASE LINKDROP PUBLIC DATABASE LINK权限授予给相应操作用户。

expdp命令远程备份

 

然后以local_username用户登录本地数据库

创建dblink的第一种方式(公有,所有用户都可以使用这个链接):

create public database link link_name connect to server_username identified by server_password using ' netservice_name ';

创建dblink的第二种方式(私有,只有创建用户可使用):

create database link link_name connect to server_username identified by server_password using ‘netservice_name’;

其中link_name是你创建的dblink名字,  GLOBAL_NAME=TRUE时,link_name必须与远程全局数据库名global_name相同;反之,可以任意命名。一般情况GLOBAL_NAME=FALSE;netservice_namenet manager中配置的网络服务名(配置网络服务名实际上是在tnsnames.ora中写入了该连接字符串)server_username / server_password是服务器上数据库的用户/密码, 如果不指定,则使用当前的用户名和口令登录到远程数据库。普遍认为私有方法稍好,不受本地服务影响,本人没有验证过。知道以上数据库链接的知识后就可以运用数据库链接进行expdp命令远程备份的操作了。

 

操作的数据库版本:oracle10.2.0.1

expdp命令远程备份操作步骤:

方法一(直接导入本地数据库):

1.创建逻辑目录

Sqlplus “/as sysdba”

create or replace directory dbbackup as 'C:\';

2.创建表空间

create tablespace hohehot datafile ‘c:\oracle\product\10.0.2\oradata\orcl\hohehot’ size 500M;//本地数据库中创建服务器上导出用户的表空间名称一致。

3. 创建dblink

Conn system/pwd;

create database link link_name connect to server_username identified by server_password using ‘netservice_name’;

4.导入本地数据库:

impdp system/pwd schemas=server_name  directory=dbbackup network_link=link_name logfile=import_local_username.log;//system/pwd为本地数据库用户system和该用户密码。

expdp命令远程备份

expdp命令远程备份

 

 

方法二(导出dmp):

1.创建逻辑目录

Sqlplus “/as sysdba”

create or replace directory dbbackup as 'C:\';
grant read,write on directory dbbackup to local_username;

2. 创建dblink

Conn local_username/local_password;

create database link link_name connect to server_username identified by server_password using ‘netservice_name’;

3.导出dmp文件:

expdp local_username/local_password   directory=dbbackup network_link=link_name  dumpfile=local_username.dmp logfile=local_name.log;

 

 

 

注:expdpserver端工具,通过NETWORK_LINK的方法可以实现远端导出,但是前提是远端也包括Oracle数据库,仅仅通过CLIENT是没有办法利用数据泵的。本人测试oracle10goracle11g进行测试时报内部错误。两台机器都用oracle10进行操作时顺利完成。但是这个参数要求表内不能有LONG类型字段,而LOB字段则可以。

expdp命令远程备份

expdp命令远程备份

 

附:

删除数据库链接的语句:

DROP [PUBLIC] DATABASE LINK link_name;

查看已创建的dblink:

select owner,object_name from dba_objects where object_type='DATABASE LINK';

Dblink引用

select * from table_name@link_name;

创建同义词:

对于经常使用的数据库链接,可以建立一个本地的同义词,方便使用:

CREATE SYNONYM worker_syn FOR worker@link_name;

创建远程视图:

CREATE VIEW worker AS SELECT * FROM worker@link_name where…;

现在本视图可与本地数据库中的任何其它视图一样对待,也可以授权给其它用户访问此视图,但该用户必须有访问数据库链接的权限。

查看GLOBAL_NAME

Conn sys/password as sysdba;

Select * from global_names;

Show parameter global_names;//查询global_namestrue还是false.

修改GLOBAL_NAME的方法:

方法1:在远程数据库的init.ora文件中将global_names设为false

方法2:用sys用户执行如下语句:ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;

修改后重新启动数据库设置才能生效。


阅读全文
0 0