2012年3月28日 周三 v$lock

本文详细解析了Oracle中的锁定机制,包括排队概念及V$LOCK表的用途。通过实例展示一个transaction如何获取多个rowlock,并解释这些操作背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

9:00				到公司
9:00	9:30		整理准备

不能晚睡啊

9:30	4:00	case
4:00	6:30	oracle


V$LOCK中的记录不是每一条代表一个锁。比如一个transaction获得了10个row lock,但是在v$lock中只会体现一条记录。这里涉及到一个QUEUE的概念。

当oracle的一个transaction在获取一个锁被阻塞的时候,他会把自己加入对这个锁的等待队列,也就是我们这里说的queue。这样等到他可以使用锁的时候,就会通知。

V$LOCK 基本上每条记录代表QUEUE的成员。




-----------------------------------

CASE 0.5 新闻5.5 学习2.5


要编写一个C语言程序来判断任意输入份的3月1星期,并以20003月1星期三作为参考基准,我们可以先创建一个基准期(如20003月1)的星期变量,然后利用Zeller's congruence算法计算其他份的3月1相对于这个基准的偏移量。这里是相应的代码: ```c #include <stdio.h> #include <stdbool.h> // 添加头文件以支持布尔值 // 定义基准期和其星期 const int base_year = 2000; const int base_month = 3; const int base_day = 1; const char base_weekday[] = "Wednesday"; // 基准为周三 // Zeller's congruence 函数 char get_weekday(int year, int month, int day) { int century = year / 100; int week_day = (day + ((13 * (month + 1)) / 5) + century + century / 4 - century / 100 + century / 400) % 7; // 将星期从0-6转换为与base_weekday相对应的英文字符 switch (week_day) { case 0: return "Sunday"; case 1: return "Monday"; case 2: return "Tuesday"; case 3: return "Wednesday"; case 4: return "Thursday"; case 5: return "Friday"; case 6: return "Saturday"; } } int main() { int year, month, day; char reference_weekday[10]; // 输入份 printf("请输入份: "); scanf("%d", &year); // 输入月份和期 printf("请输入月份(1-12): "); scanf("%d", &month); printf("请输入期: "); scanf("%d", &day); // 计算给定期的星期 char actual_weekday = get_weekday(year, month, day); // 判断是否为星期三 if (!strcmp(actual_weekday, base_weekday)) { printf("%d%02d月%02d星期三,与20003月1同为基准.\n", year, month, day); } else { printf("%d%02d月%02d不是星期三,与20003月1相比有偏差.\n", year, month, day); } return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值