『事务管理』:查看一个事务完成的比例

v$session_longops中可以得到某个 Session的运行情况,包括预计完成时间、已经运行时间,完成的工作量和剩余工作量( Oracle 8.0.X的字段略有不同,如 opname改为 compname)。
 select sid,                 /* Session ID */       opname,              /*  操作内容   */       sofar/totalwork*100, /*+ 完成百分比 */       elapsed_seconds,     /*已经执行的时间*/       time_remaining       /* 预计剩余时间 */  from v$session_longops where sid=N  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的分布式事务管理器的代码示例: ```python import uuid import time class TransactionCoordinator: def __init__(self): self.transactions = {} def start_transaction(self, participants): transaction_id = str(uuid.uuid4()) self.transactions[transaction_id] = {'participants': participants, 'status': 'pending'} return transaction_id def commit_transaction(self, transaction_id): if transaction_id not in self.transactions: raise ValueError('Transaction not found') transaction = self.transactions[transaction_id] status = transaction['status'] if status == 'committed': raise ValueError('Transaction already committed') elif status == 'aborted': raise ValueError('Transaction already aborted') for participant in transaction['participants']: try: response = participant.commit(transaction_id) if not response: raise ValueError('Participant returned false') except: raise ValueError('Participant failed to commit') transaction['status'] = 'committed' def abort_transaction(self, transaction_id): if transaction_id not in self.transactions: raise ValueError('Transaction not found') transaction = self.transactions[transaction_id] status = transaction['status'] if status == 'committed': raise ValueError('Transaction already committed') elif status == 'aborted': raise ValueError('Transaction already aborted') for participant in transaction['participants']: try: response = participant.abort(transaction_id) if not response: raise ValueError('Participant returned false') except: raise ValueError('Participant failed to abort') transaction['status'] = 'aborted' class Participant: def __init__(self): self.local_data = {} def commit(self, transaction_id): if transaction_id not in self.local_data: return False time.sleep(1) # simulate network latency del self.local_data[transaction_id] return True def abort(self, transaction_id): if transaction_id not in self.local_data: return False time.sleep(1) # simulate network latency del self.local_data[transaction_id] return True ``` 上面的代码包含两个类:`TransactionCoordinator` 和 `Participant`。 `TransactionCoordinator` 是一个事务协调器,负责协调分布式事务执行。它有一个 `transactions` 字典来跟踪所有当前进行的交易。`start_transaction` 方法会创建一个新的交易,并返回一个交易 ID。`commit_transaction` 和 `abort_transaction` 方法分别用于提交或中止一个事务。在这些方法中,协调器会向每个参与者发送请求,以提交或中止该事务。 `Participant` 是一个参与者,它有一个 `local_data` 字典来存储每个事务的本地数据。`commit` 和 `abort` 方法分别用于提交或中止一个事务。在这些方法中,参与者会检查本地数据是否包含该事务,然后将其删除。在实际情况中,参与者可能需要执行其他操作,例如在数据库中写入或删除数据。 请注意,上面的代码仅用于示例目的。在实际情况中,您需要考虑更多的情况,例如网络故障和参与者的崩溃。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值