标签: database-partitioning

在Oracle中,为什么在删除表分区时公共同义词变得无效

可以有人告诉我为什么会出现以下行为(Oracle 10.2):

SQL> create table part_test (
        i int primary key,
        d date
)
partition by range (d) (partition part_test_1 values less than (to_date('  2    3    4    5  1980-01-01', 'yyyy-mm-dd')));

create public synonym part_test for part_test;

select object_name, object_type, status from all_objects where object_name = 'PART_TEST';

alter table part_test add partition part_test_2 values less than (to_date('1981-01-01', 'yyyy-mm-dd'));

select object_name, object_type, status from all_objects where object_name = 'PART_TEST';

alter table part_test drop partition part_test_1;

select object_name, object_type, status from all_objects where …
Run Code Online (Sandbox Code Playgroud)

sql oracle synonym database-partitioning

3
推荐指数
1
解决办法
2万
查看次数

SQLite 数据库分区

我想创建 sqlite 分区结构,我创建了 3 个数据库,我将这 3 个数据库附加到另一个数据库,该数据库将是父数据库

ATTACH DATABASE '1.db' as 1
ATTACH DATABASE '2.db' as 2
ATTACH DATABASE '3.db' as 3
Run Code Online (Sandbox Code Playgroud)

在我.quit的父数据库数据库附件分离后,即使我退出数据库,我如何保持它们的连接?谢谢。

database sqlite database-partitioning

3
推荐指数
2
解决办法
9226
查看次数

向已经分区的表添加分区

将另一个分区添加到已分区表的最佳方法是什么?

原始CREATE TABLE语句如下所示:

CREATE TABLE `command_log` (
  `id` bigint(20) NOT NULL,
  `insert_time` datetime NOT NULL,
  `start_time` timestamp NULL DEFAULT '0000-00-00 00:00:00',
  `end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `command` varchar(255) NOT NULL,
  `parameters` varchar(255) DEFAULT NULL,
  `result` mediumblob,
  `status` int(11) NOT NULL,
  PRIMARY KEY (`id`,`insert_time`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE (to_days(insert_time))
(PARTITION p001 VALUES LESS THAN (736237) ENGINE = InnoDB,
 PARTITION p002 VALUES LESS THAN (736268) ENGINE = InnoDB,
 PARTITION p003 VALUES LESS THAN (736298) …
Run Code Online (Sandbox Code Playgroud)

mysql database-partitioning

3
推荐指数
1
解决办法
3255
查看次数

Oracle 本地索引和带有分区关键字的本地索引的区别

我发现this tutorial关于Oracle中的不同索引。我想知道,是否有人可以解释这三个 create index-statements 之间的区别:

CREATE INDEX invoices_idx ON invoices (invoice_date);
Run Code Online (Sandbox Code Playgroud)

CREATE INDEX invoices_idx ON invoices (invoice_date) LOCAL;
Run Code Online (Sandbox Code Playgroud)

CREATE INDEX invoices_idx ON invoices (invoice_date) LOCAL
 (PARTITION invoices_q1 TABLESPACE users,
  PARTITION invoices_q2 TABLESPACE users,
  PARTITION invoices_q3 TABLESPACE users,
  PARTITION invoices_q4 TABLESPACE users);
Run Code Online (Sandbox Code Playgroud)

我会假设,所有这些都在每个分区上创建相同类型的本地索引。

//编辑:另一个问题。让我们假设我有下表

CREATE TABLE invoices
(invoice_no    NUMBER NOT NULL,
 invoice_date  DATE   NOT NULL,
 comments      VARCHAR2(500))
PARTITION BY RANGE (invoice_date)
(PARTITION invoices_q1 VALUES LESS THAN (TO_DATE('01/04/2001', 'DD/MM/YYYY')) TABLESPACE users,
 PARTITION invoices_q2 VALUES LESS THAN (TO_DATE('01/07/2001', 'DD/MM/YYYY')) TABLESPACE …
Run Code Online (Sandbox Code Playgroud)

oracle indexing database-partitioning

3
推荐指数
1
解决办法
8660
查看次数

按日期范围分区 PostgreSQL 扫描所有分区

我有一个每月分区的表(时间戳列)。

查询数据时,explain 显示当我使用日期函数构建日期时,所有分区都被查询,而当我使用硬编码日期时,仅扫描目标分区。

所以当这样查询时:

SELECT * FROM vw_comments 
      WHERE created >= '2019-4-1'
        AND created <= '2019-4-30'
limit 100;
Run Code Online (Sandbox Code Playgroud)

它只扫描 1 个分区(1 个月,很好!)但是为了让它更动态,我传递了这样的东西(简化)

SELECT * FROM vw_comments 
      WHERE created >= (date_trunc('month', now()))::timestamp
        AND created <= (date_trunc('month', now() + interval '1 month') - interval '1 day') ::timestamp
limit 100;
Run Code Online (Sandbox Code Playgroud)

上述日期方法与第一个查询的日期完全相同,但 EXPLAIN 显示所有分区都被扫描。

如何使它工作?

编辑:添加表定义并解释

应@a_horse_with_no_name 的要求,我添加了实际表并进行了解释。这样做后,我想出了更多的东西:进行联接时,动态日期不起作用。因此,在下面的查询中省略“用户”表可以使动态日期起作用。

CREATE TABLE public.comments
(
    comment_id integer NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
    comment_id …
Run Code Online (Sandbox Code Playgroud)

postgresql database-partitioning postgresql-11

3
推荐指数
1
解决办法
1万
查看次数

将分区 LIST 附加到 postgres 11 中的现有表

我正在尝试更改表以在 postgres 11 中使用分区 LIST。我已经尝试了几个小时,但我不断收到错误消息。

我有一个巨大的表,客户,(client_id,customer_id,value)。

我已经创建了一个新的空表,客户端,通过重命名旧表clients_old,然后与创建新表:CREATE TABLE clients( like clients_old including all)

从这里开始,我在尝试添加 LIST 分区时卡住了。

我试图:

ALTER TABLE Clients attach PARTITION BY LIST  (client_id) --> fail;
ALTER TABLE Clients attach PARTITION  LIST  (client_id) --> fail;
ALTER TABLE Clients ADD PARTITION  LIST  (client_id) --> fail;
Run Code Online (Sandbox Code Playgroud)

我应该使用什么语法来更改表以使用分区?

postgresql database-partitioning

3
推荐指数
1
解决办法
3607
查看次数

我可以在oracle中从月到日更改范围间隔分区吗

我有一个表,其分区如下并具有数百万行数据。表大小为 120 GB。

PARTITION BY RANGE (Read_time) INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
Run Code Online (Sandbox Code Playgroud)

现在我想用现有数据和未来数据更改为这种分区策略。表每天按作业插入。

 PARTITION BY RANGE (Read_time) INTERVAL(NUMTODSINTERVAL(1, 'DAY'))
Run Code Online (Sandbox Code Playgroud)

我有 12 个月的分区(2018 年 10 月到 2019 年 11 月)。我希望将分区转换为日间分区。

在此输入图像描述 例如:对于 Jul'19 分区,应将其拆分为 01 Jul'19, 02 Jul'19 ....... 31 Jul'19。

数据也应该移动到新分区

我尝试过分割分区。新分区已按天创建,但行未移动到新分区。

在此输入图像描述

在此输入图像描述

oracle database-partitioning

3
推荐指数
1
解决办法
7274
查看次数

如何在postgresql中更改分区

实际上我是 PostgreSQL 的新手。我想更改现有分区以增加范围值。例如我有以下分区

PQR_271 对于从 ('260000000') 到 ('270000000') 的值

在这里,我想将范围扩展到最大值,但我无法这样做。

我尝试了下面的解决方案

CREATE TABLE public.PQR_272 PARTITION OF public.stats_to_institution FOR VALUES FROM ('270000000') TO ('280000000');
ALTER TABLE public.PQR_272 OWNER to usr_replica;
Run Code Online (Sandbox Code Playgroud)

这里我可以增加整数值,但不能增加到最大值。有没有办法将范围设置为最大值?

PostgreSQL 版本11

postgresql database-partitioning postgresql-11

3
推荐指数
1
解决办法
8681
查看次数

我在分区表中的符号列文件大小异常大——为什么会这样?

我刚刚使用展开和分区表构建了我的第一个正确的 q/kdb+ 数据库。一切都很顺利,但我刚刚注意到我的符号s列文件大小异常大。以下是我从操作系统和 q 内部可以看到的内容:

# ls -latr 2017.10.30/ngbarx
total 532
-rw-r--r-- 1 root root  24992 Apr 17 20:53 vunadj
-rw-r--r-- 1 root root  24992 Apr 17 20:53 v
-rw-r--r-- 1 root root 300664 Apr 17 20:53 s
...

q)meta ngbarx
c     | t f a
------| -----
date  | d    
s     | s   p
v     | e    
vunadj| e    
...

q)get `:2017.10.30/ngbarx/s
`p#`sym$`A`AA`AACG`AADI`AADR`AAIC`AAIC-B`AAL`AAM-A`AAMC`AAME`AAOI`AAON`AAP`AA..

q)-22!get `:2017.10.30/ngbarx/v
24990
q)-22!get `:2017.10.30/ngbarx/s
28678
q)all (get `:2017.10.30/ngbarx/s) in sym
1b
q)count sym …
Run Code Online (Sandbox Code Playgroud)

database-partitioning kdb

3
推荐指数
1
解决办法
319
查看次数

Oracle11g中的自动分区

我有一张包含大量数据的表格.我需要每天自动进行分区.我需要分区的名称是sysdate的日期.我该怎么做呢?

oracle oracle11g database-partitioning

2
推荐指数
1
解决办法
6039
查看次数