Oracle自增分区指定表空间

  • Post author:
  • Post category:其他




分区相关



oracle自动增加表空间指定分区

当前日期是 20230106,执行下面的语句后,往数据库插入数据,会自动新增 20230201 的一个分区(一定要插入数据才会新增分区)

如果时间字段是 DATE 类型:TO_DATE() 函数

create table testTable
(
tjsj DATE not null
)
tablespace tablespace_name
	pctfree 10
	initrans 1
	maxtrans 255
	storage
	(
		initial 64K
		next 1M
		minextents 1
		maxextents unlimited
	)
PARTITION BY RANGE(TJSJ) 
INTERVAL (NUMTODSINTERVAL(1,'month')) store in ( tablespace_name)
(
	PARTITION p_20230101 values LESS THAN (TO_DATE('2023-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')) 
	tablespace tablespace_name
);

如果时间字段是 TIMESTAMP 类型:TIMESTAMP 函数

create table testTable
(
tjsj TIMESTAMP(6) default SYSDATE
)
tablespace tablespace_name
	pctfree 10
	initrans 1
	maxtrans 255
	storage
	(
		initial 64K
		next 1M
		minextents 1
		maxextents unlimited
	)
PARTITION BY RANGE(TJSJ) 
INTERVAL (NUMTODSINTERVAL(1,'month')) store in ( tablespace_name)
(
	PARTITION p_20230101 values LESS THAN (TIMESTAMP'2023-02-01 00:00:00') 
	tablespace tablespace_name
);



oracle修改分区表默认表空间

场景:每月自动增加表空间并没有指定分区,以后每月生成分区放在Oracle默认的表空间 USERS,发现数据没有入库,查看原因是因为报错:

ORA-01658:无法为表空间 USERS 中的段创建 INITIAL 区(原因:表空间满了,无法进行拓展)

原因:

上面的建表语句没有加 store in ( tablespace_name)

解决:执行下面的语句,再次往数据库插入数据,成功,并且以后月份的数据放在指定表空间里。(已验证)

alter table 用户名.表名 modify default attributes tablespace 表空间名;



oracle修改分区所在表空间属性

create table testTable
(
tjsj DATE not null
)
PARTITION BY RANGE(TJSJ) 
INTERVAL (NUMTODSINTERVAL(1,'month')) store in ( tablespace_name)
(
	PARTITION p_20230101 values LESS THAN (TO_DATE('2023-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')) 
	tablespace tablespace_name
	pctfree 10
	initrans 1
	maxtrans 255
	storage
	(
		initial 64K
		next 1M
		minextents 1
		maxextents unlimited
	)
);

注意这里的建表语句,和上面的建表语句不同:表空间位置不一样。如果按照这里的建表语句,下个月的分区大小为 initail 8M

tablespace 表空间名
pctfree 10
initrans 1
maxtrans 255
strorage
(
	initial 8M
	next 1M
	mienxtents 1
	maxextents unlimited
)

想改变表空间属性值,可以这样改:

alter table 用户名.表名 modify default attributes 
tablespace 表空间名 
pctfree 对应值
initrans 对应值
maxtrans 对应值
strorage
(
	initial 对应值
	next 对应值
	mienxtents 对应值
	maxextents 对应值
);



oracle移动现有分区到其他表空间

场景:发现分区所在的表空间写错了,用下面的语句进行修改表空间

alter table 用户名.表名 move partition 分区名 tablespace 表空间名;



版权声明:本文为weixin_45005846原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。