zoukankan      html  css  js  c++  java
  • 表空间的迁移

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

    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
    

      

  • 相关阅读:
    abstract修饰方法总结
    linux tar.gz zip 解压缩 压缩命令
    html5视频播放
    Response.Redirect 打开新窗体的两种方法
    Gmail POP3设置
    加壳学习笔记(二)-汇编基础
    C#-异常处理:tyr,catch,finally ---ShinePans
    cocos2d jsb 打包 Android APK
    编写你自己的单点登录(SSO)服务
    一分钟制作U盘版BT3
  • 原文地址:https://www.cnblogs.com/black-start/p/11040610.html
Copyright © 2011-2022 走看看