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看上面的tnsna
mes.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;
}
加红的地方好像必须这样写,不管你前面是否已经建立了连接。不过有一点不好的是,这样的事务处理只能批处理更新和删除…只能根据业务需求再重写这些。