内容包括
- 表空间相关操作
- 几个简单的时间截取示例
- 固定表分区与自动表分区
- 表分区索引的创建示例
- Oracle会话的基本操作
-- 查看表空间大小
SELECT FILE_NAME as 数据文件,
TABLESPACE_NAME as 表空间名称,
AUTOEXTENSIBLE as 自动扩展,
STATUS as 状态,
MAXBYTES as 可扩展最大值,
USER_BYTES as 已使用大小,
INCREMENT_BY as 自动扩展增量
FROM dba_data_files
where TABLESPACE_NAME like '%ETONG%';
-- 扩展空间,将数据文件扩大至5000MB
alter database datafile 'D:\DataBase\Test.DBF' resize 5000m;
-- 自动增长,表空间不足时增加200MB,最大扩展5000MB
alter database datafile 'D:\DataBase\Test.DBF' autoextend on next 200m maxsize 5000m;
-- 扩展无限大空间
alter database DATAFILE 'D:\DataBase\Test.DBF' autoextend on maxsize unlimited;
-- 时间条件范例
select t.*, sysdate
from dxp_persistent_pre t
where t.IN_TIME > to_date('2018', 'yyyy');
-- 程序传进来的时间格式 转成timestamp
SELECT TO_TIMESTAMP('2019-03-08 15:26:35.178', 'YYYY-MM-DD HH24:MI:SS.FF') aa
FROM dual;
-- 截取时间
SELECT substr('2019-03-08 15:26:35.178', 0, 10) aaa FROM dual;
-- ############### 分区 ####################
-- 显示数据库所有分区表的信息:
select * from DBA_PART_TABLES where owner = 'ETONG';
-- 显示当前用户可访问的所有分区表信息:
select * from ALL_PART_TABLES where owner = 'ETONG';
-- 显示分区列 显示数据库所有分区表的分区列信息:
select * from DBA_PART_KEY_COLUMNS where owner = 'ETONG';
-- 显示当前用户可访问的所有分区表的分区列信息:
select * from ALL_PART_KEY_COLUMNS where owner = 'ETONG';
-- 显示表分区信息 显示数据库所有分区表的详细分区信息:
select table_owner, table_name, partition_name, high_value
from DBA_TAB_PARTITIONS
where table_owner = 'ETONG'
and table_name = 'DXP_PERSISTENT_PRE';
-- 创建固定分区
-- DXP_PERSISTENT_PRE_TEST: 分区的表 建表时需要事先创建默认分区
-- A_MAX: 默认分区(有范围的分区之外的唯一分区)
-- at: 该分区的上限值 `2019-06-24 00:00:00`
-- PAR_20190624: 分区名
alter table DXP_PERSISTENT_PRE SPLIT PARTITION PAR_MAX at(TIMESTAMP' 2019-06-21 00:00:00') INTO(PARTITION PAR_20190621, PARTITION PAR_MAX);
-- 一般分区索引
drop index ptr_mspt_index;
create index ptr_mspt_index on DXP_PERSISTENT_PRE (BS_FEATURE ASC) local;
-- 分区主键索引
-- ALTER TABLE 表 ADD CONSTRAINT 主键名 PRIMARY KEY (主键,分区键) USING INDEX LOCAL
alter table DXP_PERSISTENT_PRE
drop constraint PK_DXP_PERSISTENT_PRE cascade;
ALTER TABLE DXP_PERSISTENT_PRE
ADD CONSTRAINT PK_DXP_PERSISTENT_PRE PRIMARY KEY (UUID, IN_TIME) USING INDEX LOCAL;
-- 查询一个分区
select count(*) from DXP_PERSISTENT_PRE partition(PAR_20190622);
-- 删除表分区.
-- 未建立本地索引或分区索引.索引将不可用
alter table DXP_PERSISTENT_PRE drop partition SYS_P2547;
-- 清空表分区
-- delete删除清楚数据. 未清除占用空间
-- tuncate删除的话如果索引不是本地索引或不是分区索引,那么索引将失效,需要重新rebuild
ALTER TABLE DXP_PERSISTENT_PRE TRUNCATE PARTITION SYS_P3200 DROP STORAGE;
-- 查看表索引状态
-- 状态不可用就不能插入数据
-- N/A :说明这个是分区索引需要查user_ind_partitions或者user_ind_subpartitions来确定每个分区是否可用;
-- VAILD :说明这个索引可用;
-- UNUSABLE :说明这个索引不可用;
-- USABLE :说明这个索引的分区是可用的。
select owner, table_name, index_name, status
from dba_indexes
where owner = 'tablespace_name'
and table_name = 'DXP_PERSISTENT_PRE';
-- 创建表分区自动分区
create table DXP_PERSISTENT_PRE
(
UUID VARCHAR2(60) not null,
IN_TIME TIMESTAMP not null,
constraint PK_DXP_PERSISTENT_PRE primary key (UUID, IN_TIME) USING INDEX LOCAL;
)
partition by range (IN_TIME)
INTERVAL(numtodsinterval(1, 'DAY'))
(
partition part20190621 values less than (TIMESTAMP '2019-06-21 00:00:00')
-- tablespace tbs_zba_czc --表空间
pctfree 10 --预留的空间大小,10%
initrans 1 --的是一个 block 上初始预分配给并行交易控制的空间
maxtrans 255 --如果initrans 不够了,自动扩展,最大这个值
);
-- 查询会话占用
select l.session_id, s.sid, s.serial#, o.owner, o.object_name, s.osuser,s.logon_time
from v$locked_object l
left join dba_objects o
on l.object_id = o.object_id
left join v$session s
on l.session_id = s.sid;
-- 杀掉会话
alter system kill session 'sid,serial#';
-- 重建索引
alter index PK_DXP_PERSISTENT_PRE rebuild;