oracle 分布式 代理,Oracle分布式

Oracle的分布式做的挺不错的,因为你只需要建立几个database link就可得到想要的东西。

如下展示:

首先在Oracle安装目录下找到一个叫做tnsnames.ora的文件。在其中添加一些内容例如:

LOANDB =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3 )(PORT = 1521 ))

)

(CONNECT_DATA =

(SERVICE_NAME = LOANDB )

)

)

其中HOST = 192.168.1.3是你要连接的远程数据所在的ip地址。PORT = 1521是这个远程数据库的监听端口。SERVICE_NAME = LOANDB是远程的数据库名。

然后使用sqlplus登陆Oracle。

sqlplus

system@chicoDB as sysdba

然后输入你的密码

然后写这样一句话:

create public database link loan connect to system identified by feng using 'loanDB '

这里loan是你的连接名,以后就可以直接使用这个名字作为远端了。system是远程数据库的用户名。feng是那个用户名的密码。loanDB看上面的tnsnames.ora中的那一行LOANDB就是.

然后你要查询远程数据的中的system.client表就这样写一行:

select * from system.client@loan 就可以了。

如果你不小心把database link建错了,只需要drop public database link loan即可。

远程的更新稍稍有些问题。就是可能你看到不到数据库已经更新了。或者你这边看到更新了,但是远程的数据库好像并没有更新。这种问题的解决方案就是:在update或者delete语句之后使用commit;语句即可

Oracle事务处理用C#代码这样写:(我使用的ODBC)

public Boolean ExecuteTransaction(string[] sqls)

{

const string connectionString = "DSN=fengDB;UID=System;Pwd=zaqwsx;";

using (OdbcConnection connection =

new OdbcConnection(connectionString))

{

OdbcCommand command = new OdbcCommand();

OdbcTransaction transaction = null;

// Set the Connection to the new OdbcConnection.

command.Connection = connection;

// Open the connection and execute the transaction.

try

{

connection.Open();

// Start a local transaction

transaction = connection.BeginTransaction();

// Assign transaction object for a pending local transaction.

command.Connection = connection;

command.Transaction = transaction;

foreach (string sql in sqls)

{

System.Console.WriteLine(sql);

command.CommandText = sql;

command.ExecuteNonQuery();

}

// Execute the commands.

//command.CommandText =

//    "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";

//command.ExecuteNonQuery();

// Commit the transaction.

transaction.Commit();

Console.WriteLine("Both records are written to database.");

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

try

{

// Attempt to roll back the transaction.

transaction.Rollback();

}

catch

{

// Do nothing here; transaction is not active.

}

return false;

}

// The connection is automatically closed when the

// code exits the using block.

}

return true;

}

加红的地方好像必须这样写,不管你前面是否已经建立了连接。不过有一点不好的是,这样的事务处理只能批处理更新和删除...只能根据业务需求再重写这些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值