oracle 修改表空间_oracle修改表空间大小

oracle 修改表空间_oracle修改表空间大小 ZT:https://www.cnblogs.com/guohu/p/4500638.html 一、使用imp/exp。先导出源库,再创建新库把表空间创建好,然后再导入。(据说这样可以,前提…

ORACLE修改表空间方法[数据库教程]

ZT:https://www.cnblogs.com/guohu/p/4500638.html

 

一、使用imp/exp。先导出源库,再创建新库把表空间创建好,然后再导入。(据说这样可以,前提是新的库里面不能有与源库相同名字的表空间。有待验证!) 

二、使用脚本进行修改。据目前所了解,正长情况下需要修改表的空间表的索引的空间,如果涉及到BOLB字段的表,修改的方式又不一样了! 
正常情况下的修改脚本: 
1.修改表的空间 
alter table TABLE_NAME move tablespace TABLESPACENAME 

查询当前用户下的所有表 
select ‘alter table  ‘|| table_name ||‘  move tablespace tablespacename;‘  from user_all_tables; 

2.修改表的索引的空间 
alter index INDEX_NAME rebuild tablespace TABLESPACENAME 

查询当前用户下的所有索引 
select ‘alter index ‘|| index_name ||‘ rebuild tablespace tablespacename;‘ from user_indexes; 

可以使用脚本执行查询的结果,这样就可以批量处理! 

不正常情况即含有BLOB字段的表: 
参考下面的文档 

本人已经执行过,是可行的,但是不知道有没有漏掉数据库中其它对象。是否还存在有对象的表空间需要修改,需要进一步发现或有数据库高手帮忙讲解则不胜感激!目前的修改在项目中还没有出现问题! 

在移植看注意研究了下ORACLE ALTER TABLE MOVE 的语法: 

       ALTER TABLE table_name MOVE [ONLINE] tablespace_name; 
通过上面的语句可以移植表到新表空间, 

如果要移植LOB字典需要参考以下语法: 
ALTER TABLE table_name LOB (lob_item) STORE AS [lob_segment] 
      ( 
        TABLESPACE tablespace_name 
                   (STORAGE…..) 
           ENABLE|DISABLE STORAGE IN ROW 
           CHUNK integer 
           PCTVERSION integer 
            RETENTION 
            FREEPOOLS integer 
            CACHE|NOCACHE|CACHE READS 
           INDEX lobindexname 

(TABLESPACE tablesapce_name 

((STORAGE…..)) 

…. 

注解: 

LOB (lob_item):表中的lob字段 
STORE AS [lob_segment]:每个lob字段在表创建后系统都会自动单独创建一个段,可以通过这个参数手动指定一个段名 
   tablespace_name:LOB字段新的存储表空间 
(STORAGE…..):指定tablespace_name的存储属性 
    ENABLE STORAGE IN ROW:如果设置了enable storage in row 那么oracle会自动将小于4000bytes的数据存储在行内, 这是ORACLE的默认值,对于大于4000字节的lob字段保存在lob段(同disable storage in row),在表段将保留36-84字节的控制信息。对于disable storage in row,Oracle将lob字段分开保存在lob段中,而仅仅在行位置保留20字节的指针。对于相当于disable storage in row的这部分(也就是单独保存在LOB段的这部分数据),UNDO仅仅是记录指针与相关lob索引改变,如果发生更新操作等DML操作,原始数据将保留在LOB段。 

    DISABLE STORAGE IN ROW:如果DISABLE这个属性,那么lob数据会在行外存储,行内只存储该lob值得指针,而且这个属性在表 
创建后只能在MOVE表时才可以被改变 
    CHUNK:是一个很特别的属性,对一次LOB数据的操作(插入或更新),因该分配多少存储空间,指定的值最好是数据库块的倍数,而且指定的值不能大于表空间区间中NEXT的值, 要不然ORACLE会return一个错误,如果以前已经设置这个值了,那么在后期指定的值是不能被改变的。 

storage as ( CHUNK bytes )表示对于disable storage in row的这部分,最小的LOB块的大小,必须是数据库块(DB_BLOCK_SIZE)的整数倍。一个chunk最多只保留一行LOB数据,也就是说,如果你设置了32K的CHUNK,但是如果LOB字段大小只有4K,也将占用32K的空间 

storage as(cache|nocahce)表示是否允许lob段经过buffer cache并缓存。默认是nocache,表示直接读与直接写,不经过数据库的data buffer。所以,默认情况下,对于单独保存在LOB段的这部分数据,在发生物理读的时候,是直接读,如direct path read (lob) 

storage as(nocache logging |nocache nologging),logging/nologging属性只对nocache方式生效,默认是logging,如果是nologging方式,对于 保存在行外的log部分,在update等DML操作时将不记录redo日志。 

    PCTVERSION integer、RETENTION:都是ORACLE用来管理LOB字段镜像数据的。在LOB 数据的更新过程中, 
ORACLE没有用UNDO TABLESPACE空间,而是从LOB字段所在的表空间里划分一段空间来做镜像空间的, 
这个空间的大小由PCTVERSION参数控制,默认值为10,代表划分表空间的10%作为镜像空间, 
每个镜像空间的单元大小由CHUNK参数指定,pctversion可以使用在manual undo mode和automatic undo mode 环境中. 
retention应用了automatic undo mode中的undo_retention通过时间来管理lob镜像空间. 
pctversion和retention不能同时被指定.建议数据库在automatic undo mode下使用retention参数。 
FREEPOOLS integer:给LOG segment指定free list.RAC环境下integer为实例的个数.单实例环境下为1.在automatic undo mode下oracle默认采用 
FREEPOOLS来管理空闲块列表。除非我们在表的storage配置中指定了freelist groups参数. 
CACHE|NOCACHE|CACHE READS:指定lob块是否在database buffer中缓存. 
INDEX lobindexname (TABLESPACE tablesapce_name ((STORAGE…..):给lob列指定索引存储参数 
举例: 
SQL> show parameter db_create_file_dest 

SQL> create tablespace test datafile size 100M autoextend off; 
SQL> create table test(a varchar2(100), b clob, d blob) pctfree 10 tablespace test; 

SQL> desc test 
SQL> SELECT segment_name,tablespace_name,segment_type FROM dba_segments WHERE tablespace_name=‘TEST‘; 

我们发现每个LOB字段单独有一个LOGSEGMENT和LOBINDEX; 

SQL> set linesize 200 
col table_name format a5 
col column_name format a5 
SELECT b.table_name, 
a.segment_name, 
b.index_name, 
a.segment_type, 
b.column_name, 
a.tablespace_name, 
b.chunk, 
b.cache, 
b.freepools, 
b.pctversion, 
b.retention 
FROM dba_segments a,dba_lobs b 
WHERE a.segment_name = b.segment_name 
AND a.tablespace_name = ‘TEST‘ 

SQL> 

从上面的结果我们可以观察到LOB字段的各个属性. 
下面我们对LOB字段move到另一个表空间 

SQL> create tablespace lob_test datafile size 100M autoextend off; 

SQL> ALTER TABLE TEST MOVE LOB(B) STORE AS TEST_B ( 
TABLESPACE lob_test 
DISABLE STORAGE IN ROW 
CHUNK 16384 
RETENTION 
FREEPOOLS 1 
NOCACHE); 
SQL> ALTER TABLE TEST MOVE LOB(D) STORE AS TEST_D ( 
TABLESPACE lob_test 
DISABLE STORAGE IN ROW 
CHUNK 16384 
RETENTION 
FREEPOOLS 1 
NOCACHE); 
SQL> SELECT segment_name,tablespace_name,segment_type FROM dba_segments WHERE tablespace_name=‘TEST‘; 

SQL> set linesize 200 
col table_name format a5 
col column_name format a5 
SELECT b.table_name, 
a.segment_name, 
b.index_name, 
a.segment_type, 
b.column_name, 
a.tablespace_name, 
b.chunk, 
b.cache, 
b.freepools, 
b.pctversion, 
b.retention 
FROM dba_segments a,dba_lobs b 
WHERE a.segment_name = b.segment_name 
AND a.tablespace_name = ‘LOB_TEST‘ 
/SQL> 

在一些复杂情况下可能需要连表一起移植 
alter table table_name move [tablespace_name] lob (lob_item) store as [lobsegmentname] (tablespace tablespace_name…..); 
移植分区中lob 
alter table table_name move partition [partition_name] lob (lob_item) store as [logsegmentname] (tablespace_name…..); 
移植分区表 
alter table table_name move partition [partition_name] tablespace_name lob (lob_item) store as [logsegmentname] (tablespace_name…..); 
如果不需要修改lobsegmentname,可以同时移植多个列 
alter table table_name move lob (lob_item1,lob_item2,lob_item3…) store as [lobsegmentname] (tablespace tablespace_name…..); 

    LOB段也可以利用move来重整数据,以下的语句会将表与lob字段move到指定的表空间: 

   alter table table_name move [tablespace tbs_name] 

lob(lob_field1,lob_field2) store as (tablespace new_tbs_name); 

如果LOB字段在分区表中,则增加partition关键字,如 

   alter table table_name move [partition partname] [tablespace tbs_name] 

lob(field) store as (tablespace new_tbs_name); 

在数据库中合理的存储LOB列,不仅可以提升性能,而且还可以有效的管理存储空间.

ORACLE修改表空间方法

原文:https://www.cnblogs.com/Nina-piaoye/p/13298486.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7418.html

(0)
上一篇 2023-03-20
下一篇 2023-03-20

相关推荐

  • 数据库分库分表之后,你是如何解决事务问题?[通俗易懂]

    数据库分库分表之后,你是如何解决事务问题?[通俗易懂]我们需要接受失望,因为它是有限的;我们不会失去希望,因为它是无穷的。 一、概述 随着时间和业务的发展,数据库中表的数据量会越来越大,相应地,数据操作,增删改查的开销也会越来越大。因此,把其中一些大表进

    2023-03-18
    145
  • sql快速生成连续整数的方法_vb随机生成1到100随机整数

    sql快速生成连续整数的方法_vb随机生成1到100随机整数 很多时候需要用到连续的id进行数据对比,如判断是否连续等问题。那么,生成连续整数的方式有多种,首先容易想到的是逐步循环,如果想生成2kw条记录,则需要循环2kw次进行插入,那么有没有其他方式…

    2023-03-28
    161
  • 判断Python列表是否为空的方法

    判断Python列表是否为空的方法Python是一种开发语言,简单易学,因此在软件开发中被广泛使用。Python具有许多数据结构,其中列表是其中最常见和实用的数据结构之一。在使用过程中,我们常常需要判断一个列表是否为空,本文将为您介绍几种方法来判断Python列表是否为空。

    2024-07-04
    42
  • Python读取文件操作

    Python读取文件操作在我们的日常工作或学习中,经常需要使用Python读取文件,而Python读取文件操作是Python中的一项基础操作。掌握Python读取文件的操作可以为我们后续的数据处理和分析提供便利。

    2024-05-18
    70
  • mysql查询多个表的多个字段_修改表字段

    mysql查询多个表的多个字段_修改表字段前言:mysql的字段约束是以后必不可免的,下面主要写了四个:主键约束用于唯一且不能为空;非空约束即不能为空可以重复;唯一约束即可以为空但必须唯一;外键约束是让表与表之间有一定的关联;当然如何使用还…

    2023-02-09
    150
  • The PARADOX File Structure

    The PARADOX File StructureThis document describes the internal formats of the Paradox data and index files

    2023-02-05
    138
  • 完全分布式Hadoop2.X的搭建[亲测有效]

    完全分布式Hadoop2.X的搭建[亲测有效]准备工作: 安装jdk 克隆2台虚拟机完成后:新的2台虚拟机,请务必依次修改3台虚拟机的ip地址和主机名称【建议三台主机名称依次叫做:master、node1、node2 】(虚拟机的克隆,

    2023-04-22
    149
  • mysql死锁排查_java可以检测死锁吗

    mysql死锁排查_java可以检测死锁吗MySQL 8 记录死锁关的几张表有所变化,重新写一个脚本,便于在出现问题的时候快速处置问题。 死锁示意图 死锁相关的表 information_schema.INNODB_TRX `perform…

    2023-02-27
    160

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注