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

 

 

你可能感兴趣的:(oracle,数据库,exception,String,service,database)