在oracle中为一个非常大的表创建表语句

pas*_*ena 1 oracle large-data

我计划在表格中存储5 TB数据.以下是我为创建表而生成的默认脚本:

CREATE TABLE measurements
(
 measurementtime              DATE NOT NULL,
 height number,
 offset number
)
PCTFREE    10
PCTUSED
INITRANS   1
MAXTRANS   255
TABLESPACE mytablespace
STORAGE   (
  INITIAL     262144
  NEXT
  PCTINCREASE
  MINEXTENTS  1
  MAXEXTENTS  2147483645
  FREELIST GROUPS  0
  FREELISTS  0
 )
Run Code Online (Sandbox Code Playgroud)

你能否告诉我是否需要修改任何参数?

Jon*_*ler 5

在不了解整个系统的情况下很难提出好的建议.下面的想法是基于您的脚本和您之前的问题的猜测我如何设计一个存储非常大的数据的表? 但是不要相信你读过的一切.你需要做很多测试.您可以轻松地花费很多天来尝试优化这样的表格.

  1. PCTFREE 0:如果您有5 TB且没有索引,我假设您不会进行任何更新.如果这是真的,您可以将PCTFREE更改为0并节省10%的空间.

  2. NOLOGGING:如果您不需要恢复数据,并且数据库处于存档日志模式,那么您可能需要添加NOLOGGING.使用APPEND插入NOLOGGING将不会生成重做.(如果您的表空间已设置为NOLOGGING,则可能不需要这样做.)

  3. PARALLEL:您肯定希望对此表使用并行性.由于此表可能对您的系统不常见,因此最好在语句或会话级别定义并行性.但是,如果您无法控制针对此表运行的所有语句,您可能需要考虑在此定义程度以确保语句不以串行方式运行.

  4. 删除未知选项:我认为您应该删除所有未明确设置或不理解的选项.如果您使用像TOAD或DBMS_METADATA这样的工具来生成脚本,他们将始终列出每个选项,但通常您应该将大部分内容留下来让Oracle使用它喜欢的任何内容.

  5. 压缩/分区:像Gary提到的那样,分区可能非常有用.但在上一个问题中,您提到每天最多可储存200TB和5TB.你在使用穷人的分区; 每天重新命名和重新创建表格?如果这只是一天的数据,那么压缩应该对测量时间非常有帮助.

  6. 块大小:我不确定"mytablespace"的设置是什么,但是由于你没有提及它的任何内容,我猜你正在使用标准块大小.它可能会使用较大的块大小此表是值得这样你就可以得到更好的压缩(压缩,因为每块做,在一个块中的数据越多Oracle可以压缩).我不愿意这样说,因为99%的人在改变块大小的时候并没有按照他们认为的那样做.但是如此大量的数据可能值得考虑.