Skip to content

Latest commit

 

History

History
164 lines (134 loc) · 5.48 KB

File metadata and controls

164 lines (134 loc) · 5.48 KB

实验3:创建分区表

实验目的

掌握分区表的创建方法,掌握各种分区方式的使用场景。

实验内容

  • 本实验使用3个表空间:USERS,USERS02,USERS03。在表空间中创建两张表:订单表(orders)与订单详表(order_details)。
  • 使用你自己的账号创建本实验的表,表创建在上述3个分区,自定义分区策略。
  • 你需要使用system用户给你自己的账号分配上述分区的使用权限。你需要使用system用户给你的用户分配可以查询执行计划的权限。
  • 表创建成功后,插入数据,数据能并平均分布到各个分区。每个表的数据都应该大于1万行,对表进行联合查询。
  • 写出插入数据的语句和查询数据的语句,并分析语句的执行计划。
  • 进行分区与不分区的对比实验。

实验参考步骤

【示例8-11】在主表orders和从表order_details之间建立引用分区 在study用户中创建两个表:orders(订单表)和order_details(订单详表),两个表通过列order_id建立主外键关联。orders表按范围分区进行存储,order_details使用引用分区进行存储。 创建orders表的部分语句是:

SQL>CREATE TABLESPACE users02 DATAFILE
'/home/student/你的目录/pdbtest_users02_1.dbf'
  SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED,
'/home/student/你的目录/pdbtest_users02_2.dbf' 
  SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

SQL>CREATE TABLESPACE users03 DATAFILE
'/home/student/你的目录/pdbtest_users02_1.dbf'
  SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED,
'/home/student/你的目录/pdbtest_users02_2.dbf' 
  SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

SQL> 

CREATE TABLE 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 
 , CONSTRAINT ORDERS_PK PRIMARY KEY 
  (
    ORDER_ID 
  )
) 
TABLESPACE USERS 
PCTFREE 10 INITRANS 1 
STORAGE (   BUFFER_POOL DEFAULT ) 
NOCOMPRESS NOPARALLEL 

PARTITION BY RANGE (order_date) 
(
 PARTITION PARTITION_BEFORE_2016 VALUES LESS THAN (
 TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 
 'NLS_CALENDAR=GREGORIAN')) 
 NOLOGGING
 TABLESPACE USERS
 PCTFREE 10 
 INITRANS 1 
 STORAGE 
( 
 INITIAL 8388608 
 NEXT 1048576 
 MINEXTENTS 1 
 MAXEXTENTS UNLIMITED 
 BUFFER_POOL DEFAULT 
) 
NOCOMPRESS NO INMEMORY  
, PARTITION PARTITION_BEFORE_2020 VALUES LESS THAN (
TO_DATE(' 2020-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 
'NLS_CALENDAR=GREGORIAN')) 
NOLOGGING
TABLESPACE USERS
, PARTITION PARTITION_BEFORE_2021 VALUES LESS THAN (
TO_DATE(' 2021-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 
'NLS_CALENDAR=GREGORIAN')) 
NOLOGGING 
TABLESPACE USERS02
);
--以后再逐年增加新年份的分区
ALTER TABLE orders ADD PARTITION partition_before_2022
VALUES LESS THAN(TO_DATE('2022-01-01','YYYY-MM-DD'))
TABLESPACE USERS03;


  • 创建order_details表的语句如下:
CREATE TABLE 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);

查看数据库的使用情况

以下样例查看表空间的数据库文件,以及每个文件的磁盘占用情况。

$ sqlplus system/123@pdborcl

SQL>SELECT tablespace_name,FILE_NAME,BYTES/1024/1024 MB,MAXBYTES/1024/1024 MAX_MB,autoextensible FROM dba_data_files  WHERE  tablespace_name='USERS';

SQL>SELECT a.tablespace_name "表空间名",Total/1024/1024 "大小MB",
 free/1024/1024 "剩余MB",( total - free )/1024/1024 "使用MB",
 Round(( total - free )/ total,4)* 100 "使用率%"
 from (SELECT tablespace_name,Sum(bytes)free
        FROM   dba_free_space group  BY tablespace_name)a,
       (SELECT tablespace_name,Sum(bytes)total FROM dba_data_files
        group  BY tablespace_name)b
 where  a.tablespace_name = b.tablespace_name;
  • autoextensible是显示表空间中的数据文件是否自动增加。
  • MAX_MB是指数据文件的最大容量。

实验参考

  • Oracle地址:202.115.82.8 用户名:system,hr,你的用户名 , 密码123, 数据库名称:pdborcl/或者你的数据库,端口号:1521

  • ssh oracle@202.115.82.8

  • test3.sql

  • SQL-DEVELOPER修改用户的操作界面:

  • sqldeveloper授权对象的操作界面:

实验注意事项,完成时间: 2021-4-6日前上交

  • 请按时完成实验,过时扣分。
  • 查询语句及分析文档必须提交到:你的Oracle项目中的test3目录中。
  • 上交后,通过这个地址应该可以打开你的源码:https://github.com/你的用户名/oracle/tree/master/test3
  • 实验分析及结果文档说明书用Markdown格式编写。

评分标准

  • 实验独立完成,有详细的分析文档,文档中写明自己的用户名。(总分20分)
  • 表创建正确(总分10分)
  • 分区策略设计正确(总分20分)
  • SQL语句正确(总分20分)
  • 执行计划分析正确(总分30分)