今天朋友找我,希望协助实现一个较为“变态”的功能,就是保证某个表T在同一时刻只能由一个session进行数据操作(INSERT, UPDATE),貌似是和工控相关的需求,没细问场景。我的第一反应是通过调整应用程序的结构很容易实现,但他的要求是不能依赖程序的正确性,必须在数据库级别给予保证。我给出的答案是:
create bitmap index bidx_t on t(null);
当然其中null也可以是任意常数比如1,'X'等等,但不能是T表的列。这也算是位图索引一个奇葩的应用场景吧,不足的是如果某个session故意不提交,那其他session只能干等着了,这个问题用profile解决掉了,算是总体满足了要求。