Java 开发中之十:Oracle中的锁,表分区,大对象的操作

锁:数据的完整性

    行锁:insert update delete

          1、手动的锁定 select .... for update of sal

          2、等待资源时间:select .... for update of wait  1

     select * from emp where empno=7369 for update of sal;  这个时候别人就不能更新empno=7369这条数据了,这个时候只要当前用户去commit下就可以了,因为别人还处于等等状态。

     当然虽然这样只锁定了sal 但实际上整个表的行都不能更新

    

    表锁

    共享锁:查看功能可以,不能修改,删除,允许其它用户放置其它的的共享锁    lock table emp in share mode; 这个时候别的就只能查看,其它的操作除了lock table emp in share mode 可以,其它不可以。

    共享更新锁:lock table emp in share update mode;

    排它锁:独占方式: lock table emp in exclusive mode; 您想锁这个但别人也想排它锁,则只能等 

                                 如:lock table emp in exclusive mode wait;  所以最好加上wait 1加上时间

 

 

表分区: 给表添加逻辑划分--存放在物理文件的X个位置,如何理解呢:就是数据分成一块一块的存放起来,查出来就快很多

       范围分区:

       

create table emp1
(
empno number,
ename varchar2(10),

sal number(10)

)
partition by range(sal)
(
partition p1 values less than(1500),
partition p2 values less than(2500),
partition p3 values less than(maxvalue)
)

select * from emp1 partition(p1);查看第一区p1中的数据


alter table emp1 add partition p4 values less than(500);

ORA-14074: 分区界限必须调整为高于最后一个分区界限

 

散列分区,列表分区

create table emp1

(
empno number,
ename varchar2(10),

sal number(10)

)
partition by hash(sal) -- partition by list(sex)
(
partition p1 ,
partition p2
)

 

 

DSS  OLAP  都是海量数据的处理,数据仓储性才会用到表分区

OLTP:在线事务形

 

 

select * from emp

create table EMP1 (   empno    NUMBER(4) not null,   ename    VARCHAR2(10),   job      VARCHAR2(9),   mgr      NUMBER(4),   hiredate DATE,   sal      NUMBER(7,2),   comm     NUMBER(7,2),   deptno   NUMBER(2) )

partition by range(sal)--范围分区 (    

partition p1 values less than (1500),    

partition p2 values less than (2500),    

partition p3 values less than (maxvalue) );

partition by hash(sex)---hash分区 (    

partition p1,    

partition p2 );

 

partition by list(sex)---列表分区 (    

partition p1 values ('man'),    

partition p2 values ('womaan') );

 

partition by range(hiredate)--用时间来分区 (    

partition p1 values less than (to_date('1999-06-01'),'yyyy-mm-dd'),  

......................

insert into .......(,,,,,'1999-08-23');

如果有一张表了还要建表分区,还不如新弄一张表,然后在改名字   renamed oldtable to zk;

1:一般是数据是海量的,

2:数据仓库型(DSS--OLAP)更新时少,查询多                      

3:事务处理系统OLTP(增删改)比较多                      

 

 

 

大对象的操作

blog 2进制<4G

clog  文本  <4G

 

 ---设置指计指向的位置    

create or replace directory bfile_dir as 'c:\oracle_bfile';

 

--处理大数据对象的操作
create table bfile_content(
file_name varchar2(40) not null,
--保存指几文件的指针
bfile_column bfile not null--表示一个指针指向一个对象
)

insert into bfile_content values('1.jpg',bfilename('bfile_dir','1.jpg'));  bfilename是一个函数(目录,文件名),其中bfile_dir指向c:\oracle_bfile'

 

posted on 2012-12-13 20:47  peter.peng  阅读(1091)  评论(0编辑  收藏  举报