当前位置:首页 » 编程软件 » oracle自动创建分区表脚本

oracle自动创建分区表脚本

发布时间: 2022-06-17 03:59:36

Ⅰ oracle分区表如何每月自动增加分区

在oracle中如果涉及到自动的任务一般采用job的方法。
1 自己写一个存储过程。这个存储过程的目的就是给分区表增加一个分区。
2 新建一个Job,设定每个月某个时刻调用你写的存储过程
这样就能达到你每月自动增加分区的需求。

Ⅱ 如何在Oracle服务器端用脚本创建表空间,实例

1、月底我用来创建TS(表空间)的shell,
现在的TS是VIEWER_DATA_TS,要将其改名为VIEWER_DATA_TS_201410,再创建一个VIEWER_DATA_TS,文件名包含下个月信息201411。
2、为了保证硬盘有足够的空间,我保留了2年的数据
old_ym=$(date -d -24month +%Y%m)
3、为了确保删除TS,先删除TS包含的tables
truncate table VIEWER_${old_ym};
drop table VIEWER_${old_ym} purge;
DROP TABLESPACE VIEWER_DATA_TS_${old_ym} INCLUDING CONTENTS AND DATAFILES;
4、脚本实例
#!/bin/sh

. ~/.bash_profile

this_ym=`date +%Y%m`
next_ym=`date -d 1month +%Y%m`
old_ym=$(date -d -24month +%Y%m)

vts_src=VIEWER_DATA_TS
vts_dst=VIEWER_DATA_TS_${this_ym}
viewer_data_ts1=/data1/oracle/viewer_data_ts_${next_ym}_1.dbf
viewer_data_ts2=/data1/oracle/viewer_data_ts_${next_ym}_2.dbf

sqlplus viewer/user123456 << EOF
alter tablespace $vts_src rename to $vts_dst;
CREATE TABLESPACE $vts_src DATAFILE '$viewer_data_ts1' SIZE 512M AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED BLOCKSIZE 16k;
alter TABLESPACE $vts_src add DATAFILE '$viewer_data_ts2' SIZE 512M AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED;
truncate table VIEWER_${old_ym};
drop table VIEWER_${old_ym} purge;
DROP TABLESPACE VIEWER_DATA_TS_${old_ym} INCLUDING CONTENTS AND DATAFILES;
EOF
5、计划任务crontab -l,每月28号执行。
0 3 28 * * /home/oracle/prepare_viewer_ts.sh;
或者
0 4 28-31 * * [ `date -d tomorrow +\%e` -eq 1 ] && /home/oracle/prepare_viewer_ts.sh;

Ⅲ oracle数据库自动按分区号清除数据的脚本

大致思路是由DBA_TAB_PARTITIONS查询TABLE_NAME和HIGH_VALUE,来确定PARTION_NAME,通过SQL生成alter table语句。

由于DBA_TAB_PARTIONS的HIGH_VALUE字段是LONG,这里创建一个自定义包long_help,将LONG转换为VARCHAR2类型。

createorreplacepackagelong_help
authidcurrent_user
as
functionsubstr_of
(p_queryinvarchar2,
p_frominnumber,
p_forinnumber,
p_name1invarchar2defaultNULL,
p_bind1invarchar2defaultNULL,
p_name2invarchar2defaultNULL,
p_bind2invarchar2defaultNULL,
p_name3invarchar2defaultNULL,
p_bind3invarchar2defaultNULL,
p_name4invarchar2defaultNULL,
p_bind4invarchar2defaultNULL)
returnvarchar2;
end;
/
_help
as
g_cursornumber:=dbms_sql.open_cursor;
g_queryvarchar2(32765);
procerebind_variable(p_nameinvarchar2,p_valueinvarchar2)
is
begin
if(p_nameisnotnull)
then
dbms_sql.bind_variable(g_cursor,p_name,p_value);
endif;
END;
FUNCTIONsubstr_of
(p_queryinvarchar2,
p_frominnumber,
p_forinnumber,
p_name1invarchar2defaultNULL,
p_bind1invarchar2defaultNULL,
p_name2invarchar2defaultNULL,
p_bind2invarchar2defaultNULL,
p_name3invarchar2defaultNULL,
p_bind3invarchar2defaultNULL,
p_name4invarchar2defaultNULL,
p_bind4invarchar2defaultNULL)
returnvarchar2
as
l_buffervarchar2(4000);
l_buffer_lennumber;
begin
if(nvl(p_from,0)<=0)
then
raise_application_error
(-20002,'Frommustbe>=1(positivenumbers)');
endif;
if(nvl(p_for,0)notbetween1and4000)
then
raise_application_error
(-20003,'Formustbebetween1and4000');
endif;
if(p_query<>g_queryorg_queryisNULL)
then
if(upper(trim(nvl(p_query,'x')))notlike'SELECT%')
then
raise_application_error
(-20001,'Thismustbeaselectonly');
endif;
dbms_sql.parse(g_cursor,p_query,dbms_sql.native);
g_query:=p_query;
endif;
bind_variable(p_name1,p_bind1);
bind_variable(p_name2,p_bind2);
bind_variable(p_name3,p_bind3);
bind_variable(p_name4,p_bind4);
dbms_sql.define_column_long(g_cursor,1);
if(dbms_sql.execute_and_fetch(g_cursor)>0)
then
dbms_sql.column_value_long
(g_cursor,1,p_for,p_from-1,
l_buffer,l_buffer_len);
endif;
returnl_buffer;
endsubstr_of;
END;
/

创建一个分区表PART_TABLE,插入三条记录分别在三个分区中。

CREATETABLEPART_TABLE
(
TABLE_IDNUMBER(8),
SUB_DATEDATE
)
PARTITIONBYRANGE(SUB_DATE)
INTERVAL(NUMTODSINTERVAL(1,'DAY'))
(
PARTITIONP1VALUESLESSTHAN(TO_DATE('2017-12-25','YYYY-MM-DD'))
);
INSERTINTOPART_TABLEVALUES(1,DATE'2017-12-24');
INSERTINTOPART_TABLEVALUES(1,DATE'2017-12-25');
INSERTINTOPART_TABLEVALUES(1,DATE'2017-12-26');
COMMIT;

通过SQL生成alter table语句,截断第一个分区。

这里需要注意查询条件是HIGH_VALUE,条件为2017-12-25时,截断的是最大值为2017-12-25的分区。

SELECT'altertablePART_TABLEtruncatepartition'||PARTITION_NAME||
'updateINDEXES;'
FROM(SELECTTABLE_OWNER,
TABLE_NAME,
PARTITION_NAME,
LONG_HELP.SUBSTR_OF('SELECTHIGH_VALUE
FROMDBA_TAB_PARTITIONSWHERETABLE_OWNER=:TABLE_OWNER
ANDTABLE_NAME=:TABLE_NAME
ANDPARTITION_NAME=:PARTITION_NAME',1,4000,'TABLE_OWNER',TABLE_OWNER,'TABLE_NAME',TABLE_NAME,'PARTITION_NAME',PARTITION_NAME)HIGH_VALUE
FROMDBA_TAB_PARTITIONS)
WHERETABLE_NAME='PART_TABLE'
ANDHIGH_VALUELIKE'%2017-12-25%';

Ⅳ oracle怎样创建分区表

给一个例子:
create table T_S_SYS_LOG
(
LOG_MONTH VARCHAR2(6),
)
partition by list (LOG_MONTH)
(
partition PRT_M_201309 values ('201309')
tablespace TBS_LBI_SYS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);

Ⅳ 如何根据oracle数据库脚本创建数据库表

最好安装第三方开发工具,如PLSQL Developer,然后新建一个SQL窗口,复制脚本到窗口,再点击执行图标,就可以创建数据库表,或其它数据库对象了。

Ⅵ 关于oracle中创建分区表!我已经编写出来了 但是有错误!有图

partition by range(sage)
(
partition part1 values less than (20) tablespace example,
partition part2 values less than (31) tablespace orcltbs1,
partition part3 values less than (maxvalue) tablespace orcltbs2 storage(initial 10m next 20m)
)
storage(initial 20m next 10m maxextents 10)

随便插几条数据
select * from student_range partition(part1);
select * from student_range partition(part2);
select * from student_range partition(part3);
查询一下,应该没问题

Ⅶ oracle如何创建组合分区

oracle组合分区

由于Interval分区是针对range的,11g-12.1版本,目前只有Interval—*一共3种Interval的复合分区

range-list方法:

partition by range (updatetime)
interval (numtodsinterval(1,'day'))
subpartition by list(PSNCODE)
SUBPARTITION TEMPLATE(
SUBPARTITION REGION_1 values('038716'),
SUBPARTITION REGION_2 values('270719') )
(partition p1 values less than(to_date('2014-05-01','yyyy-mm-dd')))

注意:每个分区有2个子分区,分区的子分区需要手动添加

Interval分区目前测试,只支持range先分区的方式

range-hash方法:每个分区10个子hash分区(可以指定每个子分区到单独的表空间)

partition by range (updatetime)
interval(numtodsinterval(1,'day'))
subpartition by hash(PSNCODE)

SUBPARTITION template
( SUBPARTITION p1 TABLESPACE ts1
, SUBPARTITION p2 TABLESPACE ts2
, SUBPARTITION p3 TABLESPACE ts3
, SUBPARTITION P4 TABLESPACE ts4
)

(partition p1 values less than(to_date('2014-05-01','yyyy-mm-dd')))
注意:这种方式可以实现完全自动的分区,非常适合自增长特性的10位数以上的大表

hash分区最好是2的次方个,不然数据会分布不均

range-range方法:子分区需要手动添加,这种分区需要一般比较少见

PARTITION BY RANGE (time_id)

INTERVAL (NUMTODSINTERVAL(1,'DAY'))

SUBPARTITION BY RANGE(amount_sold)
SUBPARTITION TEMPLATE
( SUBPARTITION p_low VALUES LESS THAN (1000)
, SUBPARTITION p_medium VALUES LESS THAN (4000)
, SUBPARTITION p_high VALUES LESS THAN (8000)
, SUBPARTITION p_ultimate VALUES LESS THAN (maxvalue)
)
(PARTITION before_2000 VALUES LESS THAN (TO_DATE('01-JAN-2000','dd-MON-yyyy')) )

Ⅷ oracle 在创建表时按范围先分三个分区,然后根据某字段的值导入数据时自动添加分区,怎么实现呀。

分区不能只能手工创建,不支持自动创建

Ⅸ Oracle分区表怎么建唯

1、一般分区表都会很大,所以可以先创建表空间,为了让分区表存放到单独的表空间,否则默认会存放到USERS表空间
2、创建TABLESPACE TS1:
CREATE TABLESPACE TS1 DATAFILE '/data1/oracle/test.dbf' SIZE 512M AUTOEXTEND ON NEXT 512M MAXSIZE UNLIMITED;
3、创建分区表,需要确定按什么分区,比如按id或按时间段:
CREATE TABLE test_201602
(
ID NUMBER(10) NOT NULL,
CREATE_TIME DATE,
)
TABLESPACE TS1
PARTITION BY LIST (ID)
(PARTITION PT_1001 VALUES (1001) TABLESPACE TS1);
4、继续增加分区
ALTER TABLE test_201602 ADD PARTITION "PT_1003" VALUES (1003) LOGGING NOCOMPRESS;
ALTER TABLE test_201602 ADD PARTITION "PT_1004" VALUES (1004) LOGGING NOCOMPRESS;
5、查询表及分区数量
select TABLE_NAME,PARTITION_COUNT,DEF_TABLESPACE_NAME from USER_PART_TABLES order by DEF_TABLESPACE_NAME;

Ⅹ ORACLE每天创建一个分区表

可以拼出sql的字符串后用动态sql执行
不过11g有分区表自动增加分区的特性,这个更方便

热点内容
html文件上传表单 发布:2024-09-17 03:08:02 浏览:783
聊天软件编程 发布:2024-09-17 03:00:07 浏览:725
linuxoracle安装路径 发布:2024-09-17 01:57:29 浏览:688
两个安卓手机照片怎么同步 发布:2024-09-17 01:51:53 浏览:207
cf编译后没有黑框跳出来 发布:2024-09-17 01:46:54 浏览:249
安卓怎么禁用应用读取列表 发布:2024-09-17 01:46:45 浏览:524
win10设密码在哪里 发布:2024-09-17 01:33:32 浏览:662
情逢敌手迅雷下载ftp 发布:2024-09-17 01:32:35 浏览:337
安卓如何让软件按照步骤自动运行 发布:2024-09-17 01:28:27 浏览:197
Z包解压命令 发布:2024-09-17 01:27:51 浏览:221