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

 
背景
    由于 目要求,需要将数据从一个DB(DB1) 入到另一个DB(DB2)中。两个DB有相同的表 构,只是字段名字不一 :DB1中的字段是 字的,而DB2中的字段是英文的。需要建立两个表之 接,再从DB1中 索数据插入到DB2中。因此, 问题 关键 在于在DB1中建立同DB2的 接(也可以在DB2中建立同DB1的 接)。O racle 提供了 DataBase Link 接两个DB,从而方便的 实现 跨DB的操作。 
 
点摘要
从本 上来 DBLink 也是Oracle数据 中的一个 象。我 可以想 建其它Oracle 象一 样创 建和 除DBLink。只是有两点需要注意:一是 问题 ,登 的用 要有 建DBLink的 限。二是 建的DBLink的 访问权 限,如果 建了一个非管理 只能 建具有公有(public) 访问权 限的DBLink。
 
 实现细节
首先要确保你的DB能正确的 接。 接一个DB有两个 法:1是在本地安装Oracle的客 端,在TNSNAMES.ora 中配置 对远 程机器的 接。2是直接 程的数据 器。如:假 IP 172.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用户删除

 

         /// 
        
/// DBリック作成
        
/// 

        
/// エラーがある場合、エラーメッセージを戻す

         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;
            }

        }


        
/// 
        
/// DBリックの削除
        
/// 

        
/// エラーがある場合、エラーメッセージを戻す

         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 PASSWORD DBSERVER 都是 DB1 连接 DB2 时,访问 DB2 的参数。

你可能感兴趣的:(使用DBLink在两个DB间导入/导出数据)