使用DBLink在两个DB间导入/导出数据

原创 2007年10月07日 22:44:00
 
背景
    由于目要求,需要将数据从一个DB(DB1)入到另一个DB(DB2)中。两个DB有相同的表构,只是字段名字不一:DB1中的字段是字的,而DB2中的字段是英文的。需要建立两个表之接,再从DB1中索数据插入到DB2中。因此,问题关键在于在DB1中建立同DB2的接(也可以在DB2中建立同DB1的接)。Oracle提供了DataBase Link接两个DB,从而方便的实现跨DB的操作。 
 
点摘要
从本上来DBLink也是Oracle数据中的一个象。我可以想建其它Oracle 象一样创建和除DBLink。只是有两点需要注意:一是问题,登的用要有建DBLink的限。二是建的DBLink的访问权限,如果建了一个非管理只能建具有公有(public)访问权限的DBLink。
 
 实现细节
首先要确保你的DB能正确的接。接一个DB有两个法:1是在本地安装Oracle的客端,在TNSNAMES.ora中配置对远程机器的接。2是直接程的数据器。如:假IP172.16.97.131的机器上有一个DB服器,服OraServer,那也可以这样指定接:172.16.97.131/OraServer。而不用在本地配置TNS。不管采用哪方式必你的机器能正常接到DB1和DB2。 
然后就是确保连接的用户要有创建DBLink的权限。如果你需要用DB1连接DB2,那你登陆DB1的用户必须要有创建DBLink的权限。可以用SYSDBA的身份登陆DB执行下面的语句为指定用户授权:
grant create public database link to username
 
     用户有了权限后就可以创建DBLink了:
CREATE PUBLIC DATABASE LINK LKNAME
CONNECT 
TO
 USERNAME
IDENTIFIED 
BY
 PASSWORD
USING ‘DBSERVER’

 

     建立连接后可以用语句查看创建的DBLink下面的     使用完了以后要删除已创建的DBLink: 

select db_link from dba_db_links;

 

DROP PUBLIC DATABASE LINK LKNAME

     需要说明的是,如果你创建的不是PUBLICDBLINK,那只能有创建者删除自己创建的DBLINK,而非管理员权限的用户创建的DBLink只能由SYS用户删除

 

        /// <summary>
        
/// DBリック作成
        
/// </summary>
        
/// <returns>エラーがある場合、エラーメッセージを戻す</returns>

        private string CreateDBLink()
        
{
            
try
            
{
                
//DB接続処理
                if (cnnDestDB.State != ConnectionState.Open)
                
{
                    cnnDestDB.Open();
                }


                OracleCommand cmdCreateLink 
= new OracleCommand();

                cmdCreateLink.Connection 
= cnnDestDB;

                
//DBリックSQL文
                
//CREATE PUBLIC DATABASE LINK LINKNAME CONNECT TO USERNAME IDENTIFIED BY PASSWORD USING 'SID'
                string strCreateLink = "CREATE PUBLIC DATABASE LINK " + strLinkName + " CONNECT TO " + txtUserId2.Text.Trim() + " IDENTIFIED BY " + txtPassWord2.Text + " USING '" + txtSid2.Text.Trim() + "'";

                cmdCreateLink.CommandText 
= strCreateLink;

                
//DBリック作成
                cmdCreateLink.ExecuteNonQuery();

                cnnDestDB.Close();

                
return string.Empty;
            }

            
catch (Exception ex)
            
{
                
if (cnnDestDB.State != ConnectionState.Closed)
                
{
                    cnnDestDB.Close();
                }


                
return ex.Message;
            }

        }


        
/// <summary>
        
/// DBリックの削除
        
/// </summary>
        
/// <returns>エラーがある場合、エラーメッセージを戻す</returns>

        private string DeleteDBLink()
        
{
            
try
            
{
                
//DB接続処理
                if (cnnDestDB.State != ConnectionState.Open)
                
{
                    cnnDestDB.Open();
                }


                OracleCommand cmdDropLink 
= new OracleCommand();

                cmdDropLink.Connection 
= cnnDestDB;

                
//DBリックSQL文
                
//DROP PUBLIC DATABASE LINK LINKNAME
                string strDropLink = "DROP PUBLIC DATABASE LINK " + strLinkName;

                cmdDropLink.CommandText 
= strDropLink;

                
//DBリック削除
                cmdDropLink.ExecuteNonQuery();

                cnnDestDB.Close();

                
return string.Empty;
            }

            
catch (Exception ex)
            
{
                
if (cnnDestDB.State != ConnectionState.Closed)
                
{
                    cnnDestDB.Close();
                }


                
return ex.Message;
            }

        }
     需要说明的是这里的USERNAME PASSWORDDBSERVER都是DB1连接DB2时,访问DB2的参数。
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

利用DBLink+JOB实现两个Oracle数据库之间的数据同步

针对上一篇文章的部分内容这里通过DBLink+JOB实现两个Oracle数据库之间的数据同步,我自己测试了两个数据库之间的一个表同步没有问题,下面写个详细例子供大家参考;网络爬虫太多,加个地址:htt...

Oracle快照及dblink使用(两台服务器数据同步)

--名词说明: 源——被同步的数据库; 目的——要同步到的数据库; 一、创建dblink: 1、在目的数据库上,创建dblink: -- Drop existing database link dr...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

oracle dblink-数据同步(使用trigger)

物理上存放于网络的多个Oracle数据库,逻辑上可以看成一个单个的大数据库。 用户可以通过网络对异地数据库中的数据同时进行存取,而服务器之间的协同处理对于工作站用户及应用程序而言是完全透明的:开发人员...

RAC创建DBlink并使用impdp抽取源库数据

赋权并创建dblink [oracle@zhongwc1 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on ...

DB2数据的导入(Import) 导出(Export)(Load)

DB2中所谓的数据移动,包括: 1. 数据的导入(Import) 2. 数据的导出(Export) 3. 数据的装入(Load) 导入和装入都是利用DB2的相关命令把某种格式的文件中的数据...

DB2MOVE 命令导出导入数据

首先进入dos 然后输入db2cmd 1.导出到 一个文件获得sql语句 db2look -d cqyancao -e -o db.sql -i db2admin -w admin      ...
  • xwnxwn
  • xwnxwn
  • 2011-12-23 10:06
  • 1953

DB2导入导出数据脚本

DB2数据库下 将A服务的数据导入B服务的数据库中 脚本有两个: *注:该脚本千万不要在A环境中执行,应在B中执行,在B中创建编目来连接A机器,执行完成后删除编目。 movedata....

DB2数据的导入(Import) 导出(Export)(Load)

DB2中所谓的数据移动,包括: 1. 数据的导入(Import) 2. 数据的导出(Export) 3. 数据的装入(Load) 导入和装入都是利用DB2的相关命令把某种格式的文件中的数据...

DB2数据库导出表结构与导入、导出表数据

方法一 在控制中心的对象视图窗口中,选择所要导出表结构的数据表,按住Ctrl或Shift可多选,单击鼠标右键,选择->生成DDL即可。 方法二 第一步:打开DB2的命令行工具,在DB...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)