一般情况下,当我们直接truncate一个远程的表的时候,通常会返回如下的错误信息:
ORA-02021: DDL operations are not allowed on a
remote database.

比如下面的示例:

先在数据库test上创建一个test表,并插入一些数据,如下:
SQL> conn toms/toms
已连接。
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
test
SQL> create table test(no int);

表汛唇ā?

SQL> insert into test values(100);

已创建 1 行。

SQL> commit;
提交完成

然后在另外一个数据库(study)上建一个 dblink,并尝试去truncate test数据库上
toms用户下的test表:
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
study
SQL> create database link from_test connect to toms 
identified by toms using 'local_test';

数据库链接已创建。

SQL> select * from toms.test@from_test;

未选定行

SQL> truncate table toms.test@from_test;
truncate table toms.test@from_test
                         *
ERROR 位于第 1 行:
ORA-02021: 不允许对远程数据库进行 DDL 操作

SQL>

这时,我们得到了ORA-02021这样的错误,Oracle不允许这么做。那么如果确实有这样的需求,
我们该怎么办呢。下面我介绍一个方法:

先在test数据库上,建立一个类似如下的procedure:

SQL> create or replace procedure proc_truncate_remote_tab(p_tname in varchar2) as
  2  BEGIN
  3     EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || p_tname;
  4  EXCEPTION
  5     WHEN OTHERS THEN
  6          raise_application_error(-20001,SQLERRM);
  7  end;
  8  /

过程已创建。

然后在study数据库上调用test数据库上的这个procedure去完成这个truncate动作:
BEGIN
   proc_truncate_remote_tab@db_link('remote_table_name');
END;

下面测试验证一下:
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
study

SQL> 
SQL> select *from test@from_test;

NO
----------
       100

SQL>  begin
  2      proc_truncate_remote_tab@from_test('test');
  3   end;
  4  /

PL/SQL 过程已成功完成。

SQL> select *from test@from_test;

未选定行

SQL> 
可以看到,远程test数据库上toms用户下的表test已经被truncate掉了。

如何通过dblink truncate远程数据库上的表相关推荐

  1. 使用DBLINK为远程数据库的用户表创建同义词

    1.创建db_link create database link jqdb_link connect to jqcs1 identified by jqcs2 using '(DESCRIPTION ...

  2. oracle表还原truncate,Oracle数据库之Oracle表恢复(truncate)

    本文主要向大家介绍了Oracle数据库之Oracle表恢复(truncate),通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 一.模拟truncate操作: SQL> c ...

  3. oracle dblink 20001,解决ORA-02021: 不允许对远程数据库进行 DDL 操作下面通过DBLINK调用远程过程来执行这样的操作。...

    一般情况下,当我们直接truncate一个远程的表的时候,通常会返回如下的错误信息: ORA-02021: DDL operations are not allowed on a remote dat ...

  4. mysql同步表到本地_sql 同步远程数据库(表)到本地

    一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...

  5. oracle数据库触发器怎么查询后插入,[求助][Oracle][ORA-00604][ORA-02067]触发器被触发时向远程数据库插入数据...

    环境: 数据库:Oracle 12c:数据库A(本地),数据库B(远程),在A中创建DBLink连接到B 工具:sqldevloper 问题: 数据库A中的Change表中创建了触发器T,After ...

  6. MySQL federated存储引擎--访问在远程数据库的表中的数据,而不是本地的表

    一.FEDERATED简介 federated就像他的名字所说"联盟",意思就是:把两个不同区域的数据库联系起来,以致可以访问在远程数据库的表中的数据,而不是本地的表. 二.安装F ...

  7. mysql同一台服务器上不同数据库中个别表内容同步

    >>>>>>soft_wsx>>>>>> --数据备份与还原>>同步备用服务器 --1.完全备份主数据库 --2.使 ...

  8. 使用DBLink方式同步远程数据库中含Blob、Clob字段表的问题解决

    在数据库同步中我们经常会用到DBLink方式.DBLink可以将物理上存放于网络的多个数据库在逻辑上当成一个单一的大数据库.开发人员无需关心数据库的网络分布,就能很方便的实现从不同数据库之间读取数据. ...

  9. Oracle DBlink创建访问远程数据库

    一.使用场景 当要夸服务器访问数据库时,我们可以使用dblink建立连接服务器间的通道,本地创建了远程数据库的dblink后,访问远程服务器的库就像操作一个库一样了. 二.查看已创建的DBlink S ...

最新文章

  1. 在k8s中使用gradle构建java web项目镜像Dockerfile
  2. Webservices
  3. LINUX下面NetworkManager和network冲突的问题
  4. sql注入及mybatis防止sql注入
  5. Excel中PMT计算月供函数的java实现
  6. SQL Server事务日志体系结构
  7. java 产生随机数_java生成随机数
  8. 【探路者】第三周立会报告5(总第17次)
  9. 从俄罗斯方块,迈向强化学习大门
  10. 9008刷机教程oppo_OPPO和Realme手机刷机后内部存储不足,无法下载软件
  11. WordPress外贸建站多语言翻译插件推荐
  12. signature=99d87437cab1487c89a59a65cc379430,剖析根据汉字转拼音的JQuery插件源码
  13. 一小时快速建立数据分析平台
  14. 制作Unity的二维时间轴编辑器界面
  15. VS Code 常用快捷键代码大全
  16. 教会你怎么安装和使用 Visio 哦 ~ ~
  17. HTML和CSS中如何设置中文字体
  18. 谷歌被墙,怎样给谷歌浏览器加入迅雷下载插件
  19. 2014年中信银行IT类笔试回忆版
  20. 【DL】第 8 章:序列到序列模型和注意力

热门文章

  1. java服务自动降级方案_在京东我们是如何做服务降级的
  2. 让你受用一辈子的181句话
  3. poi excel设置合并单元格边框格式
  4. vue 点击倒计时 ajax 封装
  5. Airflow 中文文档:概念
  6. 记录:SqlParamater要点小结
  7. 交换排序---冒泡排序算法(Javascript版)
  8. 好久不见(致win7)
  9. 【Android 界面效果10】Android中View,ViewGroup,Window之间的关系
  10. Hadoop掀起大数据革命 三巨头齐发力