• 表空间的迁移


    一 移动表空间中数据文件的路径

    1. 首先确定数据文件的状态要为 OFFLINE

    select tablespace_name,status,contents from dba_tablespaces;
    

      

    查询数据文件的路径

    select file_id,file_name,tablespace_name from dba_data_files where file_name like '%ORACLE%' order by file_id;
    

      

    2. 将该表空间 test01 修改为OFFLINE

    alter tablespace test01 offline
    

      

    查看表空间状态确定修改成功

    select tablespace_name,status,contents from dba_tablespaces;
    

      

    3. 移动数据文件

    host copy /oracle/oradata/orcldb/test01.dbf /oracle/oradata/orcldb/test01bak.dbf
    

      

    asm移动文件

    su - grid
    
    asmcmd
    
    cp +DGSYSTEM/orcl/datafile/test01.dbf +DGDATA01/orcl/datafile/test.dbf
    

      

    4. 重新命名该表空间的路径和名称

    alter tablespace test01 
      rename datafile '/oracle/oradata/itpuxdb/test01.dbf'
      to
      '/oracle/oradata/itpuxdb/test01bak.dbf'

      

    5. 修改表空间的状态为 ONLINE 状态

    alter tablespace itpux online
    

      

     第二种方法

    在数据库位 mount的模式下

    1.复制表空间文件

    host copy /oracle/oradata/orcldb/test01.dbf /oracle/oradata/orcldb/test01bak.dbf
    

       

    asm单机模式下复制文件

    su - grid
    
    asmcmd
    
    cp +DGSYSTEM/orcl/datafile/test01.dbf +DGDATA01/orcl/datafile/test01.dbf
    

      

    2.Oracle上更改表空间文件路径

    alter database rename file 
        '/oracle/oradata/itpuxdb/itpux01.dbf' 
        to 
        '/oracle/oradata/itpuxdb/itpux01bak.dbf'
    

      

    3.打开数据库

    alter database open
    

      

    4.查看表空间名和文件路径

    select file_name,tablespace_name from dba_data_files;
    

      

    二、移动表和索引到其他表空间

    conn test01/test01;
    
    create table table01 (ID NUMBER(12),C_DATE DATE );
    

      

    像表中插入数据:

    insert into table01 values(1,sysdate);
    
    insert into table01 values(2,sysdate);
    
    insert into table01 values(3,sysdate);
    
    insert into table01 values(4,sysdate);
    
    insert into table01 values(5,sysdate);
    
    commit;
    

      

    创建 table01 表的索引

    create index idx_table01_id on table01('id');
    

       

    1. 查询该对象存放在哪个表空间

    select segment_name,tablespace_name,extents,blocks 
        from 
        dba_segments 
        where owner='TEST01';
    

      

    2.查询该对象是索引,还是表

    select object_id,object_name,object_type,status,created 
        from dba_objects 
        where 
        owner='TEST01';
    

      

    3.查询索引或者表 存放在哪个表空间

    select index_name,table_name,tablespace_name,status 
        rom 
        dba_indexes 
        where 
        owner='TEST01';
    

      

    4.移动表到另一个表空间

    alter table test01.table01 move tablespace test02;
    

      

    5. 查询该表是否移动到该表空间

    select segment_name,tablespace_name,extents,blocks 
        from dba_segments 
        where 
        owner='TEST01';
    

      

    6. 检查表是否有效,状态为 VALID 是有效

    select object_id,object_name,object_type,status,created 
        from dba_objects 
        where 
        owner='TEST01';
    

      

    7. 重建索引 并且将索引移动到另一个表空间

    alter index test01.idx_table01_id rebuild tablespace test02;
    

      

    8. 查询索引对应的表空间

    select index_name,table_name,tablespace_name,status 
      from dba_indexes
      where
      owner='TEST01';

      

    9.如果表空间里有大字段,那怎么操作呢?

    语句

    alter table USER.table move tablespcae tablespace_name lob(col_lob1,col_lob2) store as(tablespcae tablespace_name);

     

    例:

    创建一个带大字段的表

    SQL> create table test(
      2  id number,
      3  name varchar2(10),
      4  bin blob);
    
    Table created.
    
    SQL> desc test
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     ID                                                 NUMBER
     NAME                                               VARCHAR2(10)
     BIN                                                BLOB
    

      

    插入一条测试数据

    SQL> insert into test values(1,'test','27fa');
    
    1 row created.
    
    SQL> commit;
    
    Commit complete.
    

      

    查询表、大字段对象所在表空间

    SQL> select t.segment_name, t.segment_type, t.tablespace_name from user_segments t;
    
    SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME
    ------------------------------ ------------------ ------------------------------
    SYS_IL0000088731C00003$$       LOBINDEX           TEST01
    SYS_LOB0000088731C00003$$      LOBSEGMENT         TEST01
    TEST                           TABLE              TEST01
    

      

    移动表到 test02 表空间

    SQL> alter table test move tablespace test02;
    
    Table altered.
    

      

    再次查看对象所在表空间

    SQL> select t.segment_name, t.segment_type, t.tablespace_name from user_segments t;
    
    SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME
    ------------------------------ ------------------ ------------------------------
    TEST                           TABLE              TEST02
    SYS_IL0000088731C00003$$       LOBINDEX           TEST01
    SYS_LOB0000088731C00003$$      LOBSEGMENT         TEST01
    

      

    移动大字段到表空间 test02

    SQL> alter table test move tablespace test02 lob (bin) store as (tablespace test02);
    
    Table altered.
    
    SQL> select t.segment_name, t.segment_type, t.tablespace_name from user_segments t;
    
    SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME
    ------------------------------ ------------------ ------------------------------
    TEST                           TABLE              TEST02
    SYS_IL0000088731C00003$$       LOBINDEX           TEST02
    SYS_LOB0000088731C00003$$      LOBSEGMENT         TEST02
    

      

  • 相关阅读:
    regex
    ubuntu 14.04 更新 gcc/g++ 4.9.2
    然而我又更新博客了。
    我一万年也不更新一次博客
    区块链
    mongodb查看数据库和表的信息
    js高级总结
    es6 新特性
    Flex 布局教程:实例篇
    常用 Git 命令清单
  • 原文地址:https://www.cnblogs.com/black-start/p/11040610.html
Copyright © 2020-2023  润新知