## 实验三报告文档
### 1. 实验内容:
- 本实验使用3个表空间:USERS,USERS02,USERS03。在表空间中创建两张表:订单表(orders)与订单详表(order_details)。
- 使用你自己的账号创建本实验的表,表创建在上述3个分区,自定义分区策略。
- 你需要使用system用户给你自己的账号分配上述分区的使用权限。你需要使用system用户给你的用户分配可以查询执行计划的权限。
- 表创建成功后,插入数据,数据能并平均分布到各个分区。每个表的数据都应该大于1万行,对表进行联合查询。
- 写出插入数据的语句和查询数据的语句,并分析语句的执行计划。
- 进行分区与不分区的对比实验。
### 2. 实验过程:
- 使用帐号LTT创建表orders:
```sql
CREATE TABLE MZY.orders
(
order_id VARCHAR2(40 BYTE)NOT NULL
,customer_name VARCHAR2(40 BYTE)NOT NULL
,customer_tel VARCHAR2(40 BYTE)NOT NULL
,order_date DATE NOT NULL
,employee_id NUMBER(6,0)NOT NULL
,discount NUMBER(8,2)DEFAULT 0
,trade_receivable NUMBER(8,2)DEFAULT 0
)
LOGGING
TABLESPACE "USERS"
PCTFREE 10
INITRANS 1
STORAGE
(
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
);
```
- 使用帐号MZY创建表order_details:
```sql
CREATE TABLE MZY.order_details
(
, order_id NUMBER(10, 0) NOT NULL
, product_id VARCHAR2(40 BYTE) NOT NULL
, product_num NUMBER(8, 2) NOT NULL
, product_price NUMBER(8, 2) NOT NULL
)
LOGGING
TABLESPACE "USERS"
PCTFREE 10
INITRANS 1
STORAGE
(
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
);
```
- 在MZY用户中创建分区表orders,按订单日期分区:
```sql
CREATE TABLE MZY.orders
(
order_id NUMBER(10,0)NOT NULL
,customer_name VARCHAR2(40 BYTE)NOT NULL
,customer_tel VARCHAR2(40 BYTE)NOT NULL
,order_date DATE NOT NULL
,employee_id NUMBER(6,0)NOT NULL
,discount NUMBER(8,2)DEFAULT 0
,trade_receivable NUMBER(8,2)DEFAULT 0
)
TABLESPACE USERS
PCTFREE 10
INITRANS 1
STORAGE
(
BUFFER_POOL DEFAULT
)
PARTITION BY RANGE (order_date)
(
PARTITION partition_before_2016 VALUES LESS THAN (
TO_DATE('01-01-2016', 'MM-DD-YYYY'))TABLESPACE USERS,
PARTITION partition_before_2017 VALUES LESS THAN (
TO_DATE('01-01-2017', 'MM-DD-YYYY'))TABLESPACE USERS02
);
```
![orders](https://github.com/DoubleLTT/Oracle/blob/master/img/3-2.png?raw=true)
- 在MZY用户中创建分区表使用帐号LTT创建表order_details,按订单日期分区:
```sql
CREATE TABLE MZY.order_details
(
id NUMBER(10, 0) NOT NULL
, order_id NUMBER(10, 0) NOT NULL
, product_id VARCHAR2(40 BYTE) NOT NULL
, product_num NUMBER(8, 2) NOT NULL
, product_price NUMBER(8, 2) NOT NULL
, CONSTRAINT order_details_fk1 FOREIGN KEY (order_id)
REFERENCES orders ( order_id )
ENABLE
)
TABLESPACE USERS
PCTFREE 10 INITRANS 1
STORAGE ( BUFFER_POOL DEFAULT )
NOCOMPRESS NOPARALLEL
PARTITION BY REFERENCE (order_details_fk1)
(
PARTITION PARTITION_BEFORE_2016
NOLOGGING
TABLESPACE USERS
)
NOCOMPRESS NO INMEMORY,
PARTITION PARTITION_BEFORE_2017
NOLOGGING
TABLESPACE USERS02
)
NOCOMPRESS NO INMEMORY
);
```
- 插入数据的语句:
```sql
INSERT INTO MZY.orders (order_id,customer_name ,customer_tel ,order_date ,employee_id,discount)
SELECT 'test1','test1','test1'...,20 FROM DUAL
UNION ALL SELECT 'test2','test2','test2'...,30 FROM DUAL
UNION ALL SELECT 'test3','test3','test3'...,40 FROM DUAL
```
- 分区策略设计:
在建立的Orders表中,按每年一个分区,从2016年1月开始,2017年1月止,共2个分区,
PARTITION BY RANGE(order_date) 子句,表示用表的order_date属性建立范围分区,
具体的每个分区名、时间范围,在PARTITION子句定义。
- 查询数据的语句:
```sql
select * from sys_table where table_name=MZY.orders;
```
### 3. 实验总结:
在实验过程中,以MZY的用户身份进入数据库,使用命令 ls -lh 可以查看3个表空间:
USERS,USERS02,USERS03,创建两张表:订单表(orders)与订单详表(order_details)。
使用该帐号创建分区表orders和order_details,按订单日期分区。
分区的优点:增强可用性:如果表的一个分区由于系统故障而不能使用,
表的其余好的分区仍然可以使用; 减少关闭时间:如果系统故障只影响表的一部分分区,
那么只有这部分分区需要修复,故能比整个大表修复花的时间更少;
维护轻松:如果需要重建表,独立管理每个分区比管理单个大表要轻松得多; 均衡I / O :
可以把表的不同分区分配到不同的磁盘来平衡I / O 改善性能;
改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度
更快; 分区对用户透明,最终用户感觉不到分区的存在。
Oracle学习记录Oracle-master.zip
36 浏览量
2024-01-31
13:21:36
上传
评论
收藏 23KB ZIP 举报
流华追梦
- 粉丝: 4384
- 资源: 2133
最新资源
- 产品说明书翻译及练习(1).pdf 产品说明书翻译及练习(1).pdf
- 【图书馆预约】个人版(仅个人使用)
- xcap,好用的发包工具
- kouzhao-main-pycharm官网
- 太原理工大学在项目管理方面涉及多个领域和层面 以下是对太原理工大学项目管理的一些概述: 实验室建设项目管理:太原理工大学制定了
- python 数据分析示例
- 一分钟计数绷踢.mp4
- intel-visual-fortran-xe2011.zip
- tensorflow-gpu-2.5.3-cp37-cp37m-manylinux2010-x86-64.whl
- tensorflow-gpu-2.2.1-cp35-cp35m-win-amd64.whl
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈