Oracle 高级复制的defer transaction的推进过程

1)每条记录的DML修改,产生一条deferred的RPC,并将其放在deferred transaction queue中。在master site中,对于其他的每个master site,都有一个单独的deferred transaction queue。

2)到达预定的时间或者被要求时,在deferred transaction queue中的deferred RPC被发布到目标site。

3)目标site应用这些deferred transaction,如果不能被成功应用,则这些事务被放到目标site的错误队列中,通过VIEW DEFERROR可以查看到。请注意,这些transaction同样可以从VIEW DEFTRAN中查看到,而且其Destinationv_list字段为D。

4)deferred transaction被成功推入到目标site后,并不会立即从deferred transaction queue中删除,而是需要等到专门的函数purge来从中清除。purge可以手动运行,也可以计划一个job来执行。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10400030/viewspace-924538/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10400030/viewspace-924538/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Golang 中执行 Oracle 存储过程,您可以使用 Oracle 官方提供的 Go 语言驱动程序 "go-oci8"。该驱动程序提供了一个简单的 API,可以让您连接到 Oracle 数据库并执行 SQL 语句和存储过程。 以下是一个简单的示例,演示如何使用 "go-oci8" 驱动程序来执行存储过程: ```go package main import ( "database/sql" "fmt" _ "github.com/mattn/go-oci8" ) func main() { db, err := sql.Open("oci8", "user/password@localhost:1521/orcl") if err != nil { fmt.Println(err) return } defer db.Close() // 准备要执行的存储过程 query := "BEGIN my_procedure(:input, :output); END;" // 准备输入和输出参数 input := "hello" var output string // 执行存储过程 _, err = db.Exec(query, sql.Named("input", input), sql.Named("output", sql.Out{Dest: &output})) if err != nil { fmt.Println(err) return } fmt.Println(output) } ``` 在这个示例中,我们首先打开一个到 Oracle 数据库的连接。然后,我们准备要执行的存储过程的 SQL 查询,并指定输入和输出参数。接下来,我们使用 `db.Exec()` 方法来执行存储过程,其中我们传递了输入和输出参数,并使用 `sql.Out` 类型来指定输出参数。最后,我们打印输出参数的值。 请注意,您需要使用您的 Oracle 数据库连接详细信息来替换上面的连接字符串 `"user/password@localhost:1521/orcl"`,并将查询中的存储过程名称 `"my_procedure"` 替换为您要执行的存储过程的名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值