欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle实践--PL/SQL基础之表分区

程序员文章站 2022-11-25 21:07:00
pl/sql基础入门之表分区 pl/sql:过程语言(procedure language)和结构化语言(structured query language)结合而成的语言,是对...

pl/sql基础入门之表分区

pl/sql:过程语言(procedure language)和结构化语言(structured query language)结合而成的语言,是对sql的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与oracle服务器和oracle工具紧密集成,具有可移植性,灵活性和安全性。

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

表分区

/*

锁:控制共享资源并发访问的机制,用于保护正在被修改的数据

直到提交或回滚了事务之后,其他用户才可以更新数据

分类:行级锁和表级锁

*/

--行级锁:行级锁是一种排他的锁,防止其他事务修改此行

--oracle会自动在下列语句中使用行级锁

insert

update

delete

select ...forupdate--允许用户一次锁定多行记录进行更新

/*

表级锁,使用命令显式的锁定表,应用表级锁的语法

分类:1.行共享;2.共享;3.排他;4.行排他:5.共享行排他

共享锁(share)

1.锁定表,仅允许其他用户查询表中的行

2.禁止其他用户插入、更新和删除行

3.多个用户可以同时在同一个表上应用此锁

排他(exclusive) –限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表

死锁:

当两个事务相互等待对方释放资源时,就会形成死锁

oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁

*/

lock table tablename in mode mode

 

/*

分区:oracle允许用户将一个表分成多个分区,与表的创建一起

优点:1.用户可以执行查询,只访问其中特定的分区;

2.将不同的分区存储在不同的磁盘,提高访问性能和安全性

3.可以独立备份和恢复分区。

*/

--范围分区,以表中一个列或一组列的值得范围分区

--关键字:partition by range values less than

 

create table person1(
      pid number primary key,
      birthday date
)
partition by range (birthday)(
     partition p1 values less than (to_date('1980-01-01','yyyy-mm-dd')),
     partition p2 values less than (to_date('1990-01-01','yyyy-mm-dd')),
     --partition p1 values less than (maxvalue)
)
insert into person1 values(1,'ysjian',to_date('1965-02-03','yyyy-mm-dd'));
insert into person1 values(2,'ysjian',to_date('1985-02-03','yyyy-mm-dd'));
insert into person1 values(3,'ysjian',to_date('1995-02-03','yyyy-mm-dd'));
select * from person1 partition(p2);

 

--散列分区:允许用户对不具有逻辑范围的数据进行分区,关键字:hash

-- 通过在分区键上执行hash函数决定存储的分区,将数据平均分配到不同的分区

 

create table person2(
      pid number primary key,
      pname varchar2(20),
      birthday date
)
partition by hash(birthday)(
         partition p1,
         partition p2,
         partition p3,
)

--partitions 3;上面四个分区等价这个

--列表分区:允许用户将不相关的数据组织在一起,关键字:list,values

 

create table person3(
      pid number primary key,
      birthday date,
      address varchar2(50)
)
partition by list(address)(
      partition hubei values('武汉','黄石','黄冈'),
      partition shanxi values('西安','渭南','宝鸡')
)

--复合分区,关键字:subpartition

 

create table person4(
      pid number primary key,
      birthday date,
      address varchar2(50)
)
partition by range(birthday)
subpartition by hash(birthday)
subpartitions4(
     partition p1 values less than (to_date('1980-01-01','yyyy-mm-dd')),
     partition p2 values less than (to_date('1990-01-01','yyyy-mm-dd')),
     partition p3 values less than (to_date('2000-01-01','yyyy-mm-dd'))
)

--分区的维护:
--1.新增分区:在最后一个分区之后添加新分区

 

alter table person1 add partition p4 values less than (4000);

--2.删除分区:删除一个指定的分区,分区的数据也随之删除

 

alter table person1 truncate partition p3;

--3.截断分区:删除指定分区中的所有记录,不记录日志,不可恢复

 

alter table person1 truncate partition p3;

--4.合并分区 -将范围分区或复合分区的两个相邻分区连接起来

 

alter table person1 merge partitions p1, p2 into partition p2;

--5.拆分分区 -将一个大分区中的记录拆分到两个分区中

 

alter table person1split partition p2 at (1500) into (partition p21,partition p22);

/*

小结:锁用于保护多用户环境下被修改的数据

锁分为两种级别,即行级锁和表级锁

表分区允许将一个表划分成几部分,以改善大型应用的性能

分区方法包括范围分区、散列分区、复合分区和列表分区

分区维护操作包括添加、删除、截断、合并和拆分分区

*/