`
sea0108
  • 浏览: 54710 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

oracle通过DBLINK拷贝某个用户的数据到本地-SP_COPY_DATAS

 
阅读更多
SP_COPY_DATAS暂不支持LONG类型数据的拷贝。
SP_COPY_DATAS
create or replace procedure SP_COPY_DATAS(
  to_user           varchar2
 ,is_recreate_table varchar2 default 'N'
 ,is_truncate_table varchar2 default 'N'
 ,from_dblink       varchar2
 ,from_user         varchar2 default null
 ,table_filter      varchar2 default null
)
authid current_user
is
--通过DBLINK拷贝数据到本地
/*
create global temporary table GTMP_TABLES (
  TABLE_NAME VARCHAR2(50)
) on commit preserve rows;

create global temporary table GTMP_TEXT  (
  text VARCHAR2(4000),
  type varchar2(20)
) on commit preserve rows;
*/
  v_owner1 varchar2(33)  := (case when from_user is null then null else from_user || '.' end);
  v_module varchar2(100) := 'SP_COPY_DATAS';
  v_sql    varchar2(4000);
  v_date   date := sysdate;

  function get_copy_sql(tb_name varchar2) return varchar2 is
  begin
    return
    ('insert /*+append*/ into '||to_user||'.'||tb_name||' nologging
     select * from '||v_owner1 ||tb_name||'@'||from_dblink);
  end;

  function get_create_sql(tb_name varchar2) return varchar2 is
  begin
    return
    ('create table '||to_user||'.'||tb_name||' nologging parallel 8 as
     select * from '||v_owner1 ||tb_name||'@'||from_dblink||'
     where 1 = 0');
  end;
begin
  --1.确定目标表
  delete from gtmp_tables;
  if from_user is null then
    execute immediate
   'insert into gtmp_tables (table_name)
    select table_name from user_tables@'||from_dblink || '
    where 1 = 1 ' || (case when table_filter is null then null else ' and '||table_filter end);
  else
    execute immediate
   'insert into gtmp_tables (table_name)
    select table_name from all_tables@'||from_dblink||'
    where owner = '''||upper(from_user)||''''
    ||(case when table_filter is null then null else ' and '||table_filter end);
  end if;

  --2.拷贝数据
  sysout(v_module,'BEGIN SP_COPY_DATAS(to_user='||to_user
   ||',from_dblink='||from_dblink
   ||',table_filter='||table_filter||')');

  --2.1禁用约束
  delete from GTMP_TEXT;
  insert into GTMP_TEXT(TEXT,TYPE)
  select 'alter table '||owner||'.'||table_name||' disable constraint '||CONSTRAINT_NAME as text
    ,CONSTRAINT_TYPE
  from all_constraints  t
  where t.owner = upper(to_user)
    and t.CONSTRAINT_NAME not like 'BIN$%';

  sysout(v_module,'disable all constraints');
  for x in (select text from GTMP_TEXT order by type desc) loop
  begin
    execute immediate x.text;
  exception
    when others then
      sysout(v_module, '..' || x.text || ' error: '||sqlerrm);
  end;
  end loop;
  sysout(v_module,'all constraints disabled');

  --2.2 拷贝数据
  sysout(v_module,'copy tables begin');
  for x in (select table_name from gtmp_tables order by table_name) loop
  begin
    if is_recreate_table = 'Y' then
    begin
      execute immediate 'drop table '||to_user||'.'||x.table_name;
    exception
      when others then null;
    end;      
    begin
      execute immediate get_create_sql(x.table_name);
    exception
      when others then null;
    end;
    end if;

    if is_truncate_table = 'Y' then
      execute immediate 'truncate table '||to_user||'.'||x.table_name;
    end if;

    execute immediate get_copy_sql(x.table_name);
    commit;
    sysout(v_module,'..copy ' || x.table_name || ' OK');
  exception
    when others then
      sysout(v_module,'..copy ' || x.table_name || ' error: ' || sqlerrm);
  end;
  end loop;
  sysout(v_module,'copy tables end');

  --2.3 启用约束
  sysout(v_module,'enable all constraints');
  for x in (select text from GTMP_TEXT order by type) loop
  begin
    v_sql := replace(x.text,' disable constraint ',' enable constraint ');
    execute immediate v_sql;
  exception
    when others then
      sysout(v_module, '..' || v_sql || ' error: '||sqlerrm);
  end;
  end loop;
  sysout(v_module,'all constraints enabled');

  sysout(v_module,'END SP_COPY_DATAS. Elapsed time: '||round((sysdate-v_date)*24*3600)||' seconds');
end SP_COPY_DATAS;


sysout
create or replace procedure sysout(
  module_id varchar2
 ,text      varchar2
) is
begin
   dbms_output.put_line(
    to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff3') 
    || ' ['||module_id||'] ' || substr(text, 1, 1000)
   );
end sysout;
分享到:
评论

相关推荐

    Linux下ORACLE 使用dblink连接mysql_lijilinjy的专栏-CSDN博客.mhtml

    Linux下ORACLE 使用dblink连接mysql_lijilinjy的专栏-CSDN博客.mhtml

    oracle使用dblink高速复制表数据的动态存储过程

    执行存储过程,通过指定目标数据库登录信息,动态生成dblink,打开游标,按批次插入本地指定表中,每批次1万条数据。同步记录和日志信息写在自动生成的sync_log表中。同步完成后自动删除动态生成的存储过程、dblink...

    oracle通过dblink链接 mysql和mssql例子

    Oracle数据库提供了异构服务的功能,允许从Oracle数据库实例访问其他数据库系统的数据,例如MySQL...DBLink的使用大大扩展了Oracle数据库的数据处理能力,使用户能够在单个数据库操作环境中访问和操作多个异构数据源。

    Oracle使用dblink导用户下的所有表数据(以迁移scott用户为例)

    Oracle数据库是一种广泛应用于企业级数据存储和...通过创建和使用DB Link,我们可以轻松地将scott用户下的所有表数据迁移到目标数据库。在实际操作中,需根据具体环境和需求调整迁移策略,确保数据的完整性和一致性。

    oracle通过DBlink连接mysql搭建过程

    在配置了所有组件之后,Oracle 数据库就可以通过 DBlink 连接 MySQL 数据库,实现数据的交换和共享。这整个过程需要细心和耐心,需要读者逐步按照步骤进行配置和测试。 DBlink 是 Oracle 提供的一种数据库链接机制...

    oracle通过dblink连接mysql

    oracle通过dblink连接mysql,主要参考了网上的文章,由于本人oracle服务端是32位,MySQL是64,附件中包含32位驱动 mysql-connector-odbc-5.2.4-ansi-win32.msi

    Oracle之dblink的配置

    Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置

    Oracle通过DBlink连接MySQL

    Oracle通过DBlink连接MySQL是一种常见的数据集成方式,它允许Oracle数据库与MySQL数据库之间进行通信,实现数据的交互和共享。以下将详细介绍整个配置过程。 **一、部署环境** 在进行配置之前,确保你的系统环境是...

    ORA-12154_TNS无法解析指定的连接标识符

    ORA-12154_TNS无法解析指定的连接标识符

    记一次oracle通过dblink连接mysql实施

    Oracle数据库通过DBLink连接MySQL是一种常见的跨数据库交互方式,它允许Oracle数据库远程访问MySQL的数据,实现数据集成或数据迁移。本文记录了一次在Oracle 10g 64位环境中,通过DBLink连接到MySQL 5.5的过程,并在...

    Oracle DBLink建立连接

    通过以上内容的学习,我们可以了解到Oracle DBLink是一种非常实用的功能,它不仅能够简化多数据库环境下的数据集成工作,还能有效提升数据管理和应用开发的灵活性。同时,在实际应用中需要注意权限管理和安全性问题...

    oracle dblink 创建过程

    通过创建DBLink,可以在两个不同的Oracle数据库之间建立连接,实现数据的共享和交换。结合Oracle快照技术,可以有效地实现本地数据库与远程数据库之间的数据同步。此外,通过设置适当的刷新策略和使用触发器,可以...

    Oracle-不同数据库DBLINK导数据使用说明

    数据库链接(DBLINK)允许一个Oracle数据库实例连接到另一个远程数据库实例,从而实现数据的透明访问。创建DBLINK的基本语法如下: ```sql CREATE DATABASE LINK db_link_name CONNECT TO remote_user IDENTIFIED ...

    oracle通过odbc建立dblink访问sqlserver数据库

    为了实现Oracle数据库与SQLServer数据库之间的数据交换,可以通过多种方式实现连接,其中一种较为简便的方法是利用Oracle提供的ODBC(Open Database Connectivity)机制来建立DBLink。这种方式相较于使用透明网关...

    Oracle10g通过DBLink访问MySQL数据(Windows)

    Oracle10g通过DBLink访问MySQL数据 安装环境:Windows_Server2003, Oracle10gR2, MySQL4(服务器版在另外电脑上),MySql-Connector3.51(客户端ODBC驱动) 。

    oracle数据库参数.pdf

    Oracle数据库参数是控制数据库行为和性能的关键配置项。从提供的文件片段中,我们可以提取和总结出许多重要的Oracle数据库参数知识点。 **1. 初始化参数和配置文件** Oracle数据库的初始化参数存储在数据库的参数...

    Oracle10g通过DBLink访问MySQL数据

    ### Oracle10g通过DBLink访问MySQL数据 在企业级应用环境中,经常会出现不同数据库系统之间的数据交互需求。本文将详细介绍如何配置Oracle10g数据库,使其能够通过DBLink访问MySQL数据库中的数据。这一功能对于实现...

    Oracle通过DBLink连接MySQL.doc

    通过dblink连接oracle和mysql,将数据从oracle传输到mysql,详细记录了搭建过程和创建报错

    oracle10g或11g通过dblink访问sql server数据库

    最后,在Oracle服务器(如192.168.1.141)上的`network/admin`目录下的`tnsnames.ora`文件中,需要添加相应的条目以便能够通过DBLink连接到SQL Server。例如: ```plaintext comm = (DESCRIPTION = (ADDRESS = ...

    oracle 存储过程 函数 dblink

    ### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...

Global site tag (gtag.js) - Google Analytics