zoukankan      html  css  js  c++  java
  • Oracle 11g 迁移 bigfile 表空间数据文件(单机/rac)

    1 理论知识--转载

    Oracle表空间Tablespace是逻辑结构的最高层次,其他分别对应段对象segment、区extent和块block。而物理层面的Oracle数据库是通过一系列的文件构成,其中数据文件datafile是与Tablespace进行对应的对象。
    Tablespace与Datafile的关系是一对多的关系。一个表空间Tablespace可以对应多个Datafile,Datafile则是只能归属在一个Tablespace里。
    传统的Oracle管理概念中,倡导一个表空间中创建多个数据文件,特别是创建分布在多个存储磁盘上,以期分散I/O。
    但是,Oracle10g推出的BigFile Tablespace大文件表空间,将这个概念有所变化。

    1、 Bigfile tablespace
    在 Oracle 10g中,推出了 Bigfile tablespace 的概念。表空间 Tablespace 从 Oracle 10g以后就分为两个类型,smallfile tablespace 和 bigfile tablespace。过去一个表空间对应多个数据文件我们成为Smallfile Tablespace。
    所谓 Bigfile Tablespace 最显著的差别就是一个表空间只能对应一个数据文件。Bigfile Tablespace 虽只对应一个数据文件,但数据文件对应的最大体积大大增加。
    传统的 small datafile 每个文件中最多包括 4M 个数据块,按照一个数据块 8K 的大小核算,最大文件大小为 32G
    每个 Small Tablespace 理论上能够包括 1024 个数据文件,这样计算理论的最大值为 32TB 大小。
    而 Bigfile Datafile 具有更强大的数据块 block 容纳能力,最多能够包括 4G 个数据块
    同样按照数据块8K计算,Bigfile Datafile 大小为32KG=32TB。理论上 small tablespace 和 big tablespace 总容量相同
    SQL> select * from v$version;
    SQL> create bigfile tablespace bttest datafile 'D:\ORADATA\ORCL\BTTEST.dbf' size 10m autoextend off
    2 extent management local uniform. size 1m
    3 segment space management auto;
    此处,我们通过create bigfile tablespace 语句建立 Bigfile Tablespace。
    注意两方面的问题,其一是 Bigfile Tablespace 必须使用 local 本地 extent 管理方式,不允许使用DMT(Dictionary Managed Tablespace)。
    另一方面是段 segment 空间使用 auto 自动方式,不要使用 manual。
    不过这两个条件在Undo或者临时Bigfile表空间的时候,是允许例外的

    Small Tablespace 和 Bigfile Tablespace 是可以并存的。
    SQL> select tablespace_name, bigfile from dba_tablespaces;

    在创建 bigfile tablespace 的时候,就已经指定了数据文件。如果此时我们尝试加入一个新的数据文件,Oracle系统会报错。
    SQL> alter tablespace bttest add datafile 'D:\ORADATA\ORCL\BTTEST02.dbf' size 10m autoextend off;
    ORA-32771: 无法在大文件表空间中添加文件

    bigfile tablespace 的特性。
    此处我们观察一下 Bigfile Tablespace 体系下的一些特征
    SQL> select file_name, file_id, relative_fno from dba_data_files;

    每个文件都包括两个编号,一个是绝对文件编号 file_id,另一个是相对文件编号 relative_fno。
    在文件数量较少,或者创建删除文件比较少情况下的数据库,file_id和relative_fno是相同的。
    Relative_fno 是一个循环周期,以1024 为一个循环。当file_id 依次递增到1024整数倍之后,file_id会继续增加,而relative_fno会形成一个内部循环。

    这种机制让我们联想起了 Oracle Small Tablespace 的数据文件上限限制,也是 1023 个文件。
    我们设想一种极端的情况,如果一个表空间中的数据文件个数超过了1024,也就是一个表空间内的数据文件中,存在相同的relative_fno。这种情况首先是不被允许的。

    设置1024的relative_fno 是进行Oracle数据寻址的需要。这里我们要关注到Oracle定位数据行的rowid信息,
    rowid 是 Oracle 内部唯一标注一行记录的地址。Rowid 包括四部分组成,对象号+文件号+块号+slot行号。
    Rowid 长度固定,所以四部分的长度都是固定的,这里的文件号fno是相对文件编号。这里的查找顺序是,对象号获取所在表空间的编号,在表空间内部使用相对文件号来定位到文件。
    如果一个表空间内出现相同的relative_fno文件,定位就不可能了。所以,small tablepsace 的内部文件上限必然是 1023。

    但是,Bigfile Tablespace存在一些不同之处。如果一个表空间只有一个数据文件且只能拥有一个数据文件,那么relative_fno就失去了存在的意义。
    所以在 dba_data_files 中的 relative_fno 列上,bigfile tablespace 对应的 datafile 是直接1024。
    SQL> create table t_big tablespace bttest as select * from dba_tables;
    SQL> select dbms_rowid.rowid_object(t.rowid) obj_id, dbms_rowid.rowid_relative_fno(t.rowid,'BIGFILE') relative_fno,
    2 dbms_rowid.rowid_block_number(t.rowid) block_num, dbms_rowid.rowid_row_number(t.rowid) rownums,
    3 dbms_rowid.rowid_to_absolute_fno(t.rowid,'SYS','T_BIG') abso_fno
    4 from t_BIG t where rownum<4;
    借助 dbms_rowid 包的相应方法,我们也可以看清 bigfile tablespace 上rowid行的 relative_fno 信息。

    3、Bigfile Datafile 大小探索
    一个数据文件最大能有多大,在 Oracle 中有两个因素控制,一个是 Oracle 内部寻址能够寻找到的最大范围多少个块,另一个是数据库每个块大小是多大。
    我们首先来看看 Small Datafile 的情况。Rowid是一个用16进制表示的18位长度类字符串。其中,前6位表示object_id,之后3位表示文件编号,之后6位表示块号,最后3位表示row的slot编号。
    在 small datafile 中,对数据块有6×4=24位二进制表示。Oracle利用中间的22位进行块地址存储。这样,22位二进制可以表示的数据块编号范围为(2^22-1)=4M个数据块。
    如果按照每个数据块 8K 的普遍大小计算,这样每个 small datafile 大小上限就是 32G。
    如果按照每个数据块上限 32K 计算,这样每个 small datafile 大小上限就是 128G。

    在bigfile datafile中,事情有所不同。由于没有relative_fno的问题,这样rowid中就不需要保存relative_fno的最多1024的数值。
    这样就节省出10位二进制位给数据块定位,相同长度的rowid就可以进行32位二进制长度的数据块寻址。
    每个 bigfile datafile 中,最多可以包括到(2^32-1)=4G 个数据块。
    在数据块大小8K的环境下,最大为 32TB 数据。
    如果是数据块大小为32K环境下,文件最大可以到 128TB 大小。

    4、结论和讨论
    首先,实际生产环境下,Bigfile Tablespace 在应对大数据量存储的时候略有优势。
    因为Small Tablespace 在实现相同的存储大小时,要消耗大量的多文件管理开销。同时控制文件为了维护多位置上的文件,协同检查点和文件头SCN等内容,要消耗很大精力。
    其次,Small Tablespace 的存储量只是理论,很少有系统真的建立上千个文件在一个表空间中。从这个角度看,Bigfile吸引力是不小的。
    最后,Oracle 对于Bigfile Tablespace 支持是全面的。存储层面上,ASM、Logical Volumn Manager/RAID、Dynamically Extensible Logical Volumes和OMF都提供了比较全面的支持。
    但是,Bigfile Tablespace 并不是万灵药。Bigfile 是 Oracle 层面的 Bigfile,并不涉及到OS层面的支持。使用Bigfile的时候,要选择合适的底层存储系统提供支持。
    此外,Bigfile的理念违背了我们过去宣称的I/O分散理论。所以,最好在有底层强大存储支持(如ASM)的情况下使用Bigfile,达到最优的性能平衡点。

    链接:http://blog.itpub.net/26736162/viewspace-2039283/
    官方:https://docs.oracle.com/database/121/SQLRF/statements_7003.htm#SQLRF01403

    Use this clause to determine whether the tablespace is a bigfile or smallfile tablespace. This clause overrides any default tablespace type setting for the database.
    --A bigfile tablespace contains only one data file or temp file, which can contain up to approximately 4 billion (232) blocks. 
    	The minimum size of the single data file or temp file is 12 megabytes (MB) for a tablespace with 32K blocks and 7MB for a tablespace with 8K blocks. 
    	The maximum size of the single data file or temp file is 128 terabytes (TB) for a tablespace with 32K blocks and 32TB for a tablespace with 8K blocks.
    --A smallfile tablespace is a traditional Oracle tablespace, which can contain 1022 data files or temp files, each of which can contain up to approximately 4 million (222) blocks.
    If you omit this clause, then Oracle Database uses the current default tablespace type of permanent or temporary tablespace set for the database. 
    If you specify BIGFILE for a permanent tablespace, then the database by default creates a locally managed tablespace with automatic segment-space management.
    
    Creating a Bigfile Tablespace: Example 
    The following example creates a bigfile tablespace bigtbs_01 with a data file bigtbs_f1.dbf of 20 MB:
    CREATE BIGFILE TABLESPACE bigtbs_01
      DATAFILE 'bigtbs_f1.dbf'
      SIZE 20M AUTOEXTEND ON;
    
    Creating an Undo Tablespace: Example 
    The following example creates a 10 MB undo tablespace undots1:
    CREATE UNDO TABLESPACE undots1
       DATAFILE 'undotbs_1a.dbf'
       SIZE 10M AUTOEXTEND ON
       RETENTION GUARANTEE;
    
    Creating a Temporary Tablespace: Example 
    This statement shows how the temporary tablespace that serves as the default temporary tablespace for database users in the sample database was created:
    CREATE TEMPORARY TABLESPACE temp_demo
       TEMPFILE 'temp01.dbf' SIZE 5M AUTOEXTEND ON;   
    

    2 操作--测试环境(以下操作仅供参考。生产环境务必确认相关:1 在线与停机迁移 2 操作前进行全备份 3 数据文件大小,磁盘io等,考虑迁移时间,服务器性能等)

    [root@oracle ~]# ps -ef|grep oracle
    root       1549   1532  0 10:50 pts/0    00:00:00 grep oracle
    [root@oracle ~]# su - oracle
    [oracle@oracle ~]$ lsnrctl start
    [oracle@oracle ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.4.0 Production on Tue Jan 11 10:51:12 2022
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> startup;
    ORACLE instance started.
    
    Total System Global Area 1603411968 bytes
    Fixed Size		    2253664 bytes
    Variable Size		 1023413408 bytes
    Database Buffers	  570425344 bytes
    Redo Buffers		    7319552 bytes
    Database mounted.
    Database opened.
    SQL> select instance_name from v$instance;
    
    INSTANCE_NAME
    ----------------
    CAD
    SQL> select * from v$version;
    
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    PL/SQL Release 11.2.0.4.0 - Production
    CORE	11.2.0.4.0	Production
    TNS for Linux: Version 11.2.0.4.0 - Production
    NLSRTL Version 11.2.0.4.0 - Production
    SQL> select tablespace_name, bigfile from dba_tablespaces;
    
    TABLESPACE_NAME 	       BIG
    ------------------------------ ---
    SYSTEM			       NO
    SYSAUX			       NO
    UNDOTBS1		       NO
    TEMP			       NO
    USERS			       NO
    SQL> SHOW parameters db_block_size
    
    NAME				     TYPE	 VALUE
    ------------------------------------ ----------- ------------------------------
    db_block_size			     integer	 8192
    SQL> set linesize 500
    SQL> set pagesize 100
    SQL> col FILE_NAME format a100
    SQL> select FILE_NAME,TABLESPACE_NAME from dba_data_files;
    
    FILE_NAME											     TABLESPACE_NAME
    ---------------------------------------------------------------------------------------------------- ------------------------------
    /u01/app/oracle/oradata/CAD/system01.dbf							     SYSTEM
    /u01/app/oracle/oradata/CAD/sysaux01.dbf							     SYSAUX
    /u01/app/oracle/oradata/CAD/undotbs01.dbf							     UNDOTBS1
    /u01/app/oracle/oradata/CAD/users01.dbf 							     USERS
    SQL> create bigfile tablespace bigtbs_01 datafile '/u01/app/oracle/oradata/CAD/bigtbs_01.dbf' SIZE 20M AUTOEXTEND ON; #创建 bigfile 类型表空间
    
    Tablespace created.
    SQL> select tablespace_name, bigfile from dba_tablespaces;
    
    TABLESPACE_NAME 	       BIG
    ------------------------------ ---
    SYSTEM			       NO
    SYSAUX			       NO
    UNDOTBS1		       NO
    TEMP			       NO
    USERS			       NO
    BIGTBS_01		       YES
    SQL> alter tablespace bigtbs_01 add datafile '/u01/app/oracle/oradata/CAD/bigtbs_02.dbf' size 10m autoextend off; #向bigfile类型表空间增加数据文件报错,该类型只支持一个数据文件
    alter tablespace bigtbs_01 add datafile '/u01/app/oracle/oradata/CAD/bigtbs_02.dbf' size 10m autoextend off
    *
    ERROR at line 1:
    ORA-32771: cannot add file to bigfile tablespace
    创建测试用户
    CREATE USER bigtbs_01
      IDENTIFIED BY "bigtbs_01"
      DEFAULT TABLESPACE bigtbs_01
      TEMPORARY TABLESPACE TEMP
      PROFILE DEFAULT
      ACCOUNT UNLOCK;
      
      GRANT CONNECT TO bigtbs_01;
      GRANT DBA TO bigtbs_01;
      GRANT RESOURCE TO bigtbs_01;
      ALTER USER bigtbs_01 DEFAULT ROLE ALL;
    创建表
    create table tb_objets as select * from all_objects;
    
    select * from tb_objets;
    

    3 单机

    Oracle 数据库的表空间及数据库文件的迁移方法 -- 单机
    一、移动表空间数据文件(不停机)--bigfile tablespace
    1 创建迁移路径(注意权限)
    表空间:bigtbs_01
    数据文件:'/u01/app/oracle/oradata/CAD/bigtbs_01.dbf'
    迁移前路径:[oracle@oracle ~]$ ll /u01/app/oracle/oradata/CAD/
    迁移后路径:[oracle@oracle ~]$ ll  /home/oracle/tb_remove
    [oracle@oracle ~]$ ll /u01/app/oracle/oradata/CAD/
    total 4334200
    -rw-r----- 1 oracle oinstall   20979712 Jan 11 11:22 bigtbs_01.dbf
    -rw-r----- 1 oracle oinstall    9748480 Jan 11 11:24 control01.ctl
    -rw-r----- 1 oracle oinstall   52429312 Jan 11 11:24 redo01.log
    -rw-r----- 1 oracle oinstall   52429312 Jan 11 11:21 redo02.log
    -rw-r----- 1 oracle oinstall   52429312 Jan 11 11:21 redo03.log
    -rw-r----- 1 oracle oinstall  629153792 Jan 11 11:21 sysaux01.dbf
    -rw-r----- 1 oracle oinstall  786440192 Jan 11 11:21 system01.dbf
    -rw-r----- 1 oracle oinstall  164634624 Jan 11 10:51 temp01.dbf
    -rw-r----- 1 oracle oinstall  828383232 Jan 11 11:21 undotbs01.dbf
    -rw-r----- 1 oracle oinstall 1841569792 Jan 11 10:51 users01.dbf
    [oracle@oracle ~]$ mkdir -p /home/oracle/tb_remove
    [oracle@oracle ~]$ ll  /home/oracle/tb_remove
    total 0
    [oracle@oracle ~]$ ll  /home/oracle/
    total 900100
    -rw-r--r-- 1 oracle oinstall 909139968 Aug 19 23:48 CAD_2021-06-17.dmp
    -rw-r--r-- 1 oracle oinstall      4498 Aug 20 17:46 import.log
    -rw-r----- 1 oracle oinstall    287694 Aug 20 00:12 install2021-08-20_00-06-04.log
    -rw-r----- 1 oracle oinstall    287694 Aug 20 17:37 install2021-08-20_17-31-40.log
    -rw-r----- 1 oracle oinstall       466 Aug 20 17:37 LOG_cat_owb.TXT
    -rw-r--r-- 1 oracle oinstall  11960320 Aug 19 23:48 SCM_2021-06-17.dmp
    drwxr-xr-x 2 oracle oinstall      4096 Jan 11 11:25 tb_remove
    2 修改表空间为 Offline 状态
    SQL> ALTER TABLESPACE bigtbs_01 OFFLINE;
    
    Tablespace altered.
    3 拷贝数据文件
    SQL> ! cp /u01/app/oracle/oradata/CAD/bigtbs_01.dbf /home/oracle/tb_remove/bigtbs_01.dbf
    
    SQL> ! ls /home/oracle/tb_remove/bigtbs_01.dbf
    /home/oracle/tb_remove/bigtbs_01.dbf
    
    4 修改 oracle 表空间指向地址
    SQL> alter database rename file '/u01/app/oracle/oradata/CAD/bigtbs_01.dbf' to '/home/oracle/tb_remove/bigtbs_01.dbf';
    
    Database altered.
    5 修改表空间为 Online 状态
    SQL> alter tablespace bigtbs_01 online;
    
    Tablespace altered. 
    6 查看迁移后
    SQL> select file_name from sys.dba_data_files;
    
    FILE_NAME
    ----------------------------------------------------------------------------------------------------
    /u01/app/oracle/oradata/CAD/system01.dbf
    /u01/app/oracle/oradata/CAD/sysaux01.dbf
    /u01/app/oracle/oradata/CAD/undotbs01.dbf
    /u01/app/oracle/oradata/CAD/users01.dbf
    /home/oracle/tb_remove/bigtbs_01.dbf
    SQL> select tablespace_name ,sum(bytes)/1024/1024||'M' as freespaces from dba_data_files group by tablespace_name; #查看空闲表空间
    
    TABLESPACE_NAME 	       FREESPACES
    ------------------------------ -----------------------------------------
    BIGTBS_01		       20M
    SYSAUX			       600M
    UNDOTBS1		       790M
    USERS			       1756.25M
    SYSTEM			       750M
    迁移后查询
    SQL> conn bigtbs_01/bigtbs_01
    Connected.
    SQL> select count(*) from tb_objets;
    
      COUNT(*)
    ----------
         84507
    创建表与查询
    SQL> create table tb_objets1 as select * from all_objects;
    
    Table created.
    
    SQL> select count(*) from tb_objets1;
    
      COUNT(*)
    ----------
         84508
    删除之前的数据文件
    SQL> ! rm -f /u01/app/oracle/oradata/CAD/bigtbs_01.dbf
    
    SQL> select file_name from sys.dba_data_files;
    
    FILE_NAME
    ----------------------------------------------------------------------------------------------------
    /u01/app/oracle/oradata/CAD/system01.dbf
    /u01/app/oracle/oradata/CAD/sysaux01.dbf
    /u01/app/oracle/oradata/CAD/undotbs01.dbf
    /u01/app/oracle/oradata/CAD/users01.dbf
    /home/oracle/tb_remove/bigtbs_01.dbf
    查看用户的表与表空间
    SQL> select table_name,tablespace_name from user_tables;
    
    TABLE_NAME		       TABLESPACE_NAME
    ------------------------------ ------------------------------
    TB_OBJETS1		       BIGTBS_01
    TB_OBJETS		       BIGTBS_01

    相关截图

    迁移前

     迁移后

     操作

     

    4 RAC

    == RAC 
    [root@rac03 ~]# su - oracle
    [oracle@rac03 ~]$ ps -ef|grep oracle
    [root@rac03 ~]# su - grid
    [grid@rac03 ~]$ asmcmd
    ASMCMD> lsdg
    State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
    MOUNTED  EXTERN  N         512   4096  1048576    307200   155036                0          155036              0             Y  DATA/
    [oracle@rac03 ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.4.0 Production on Tue Jan 11 11:24:37 2022
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
    Data Mining and Real Application Testing options
    
    SQL> select * from v$version;
    
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    PL/SQL Release 11.2.0.4.0 - Production
    CORE	11.2.0.4.0	Production
    TNS for Linux: Version 11.2.0.4.0 - Production
    NLSRTL Version 11.2.0.4.0 - Production
    
    SQL> select instance_name from v$instance;
    
    INSTANCE_NAME
    ----------------
    SCM1
    
    SQL> select tablespace_name, bigfile from dba_tablespaces;
    
    TABLESPACE_NAME 	       BIG
    ------------------------------ ---
    SYSTEM			       NO
    SYSAUX			       NO
    UNDOTBS1		       NO
    TEMP			       NO
    USERS			       NO
    SCM			       NO
    
    6 rows selected.
    
    SQL> SHOW parameters db_block_size
    
    NAME				     TYPE	 VALUE
    ------------------------------------ ----------- ------------------------------
    db_block_size			     integer	 8192
    SQL> set linesize 500
    SQL> set pagesize 500
    SQL> col FILE_NAME format a100
    SQL> select FILE_NAME,TABLESPACE_NAME from dba_data_files;
    
    FILE_NAME											     TABLESPACE_NAME
    ---------------------------------------------------------------------------------------------------- ------------------------------
    +DATA/scm/datafile/system.3524.1063123799							     SYSTEM
    +DATA/scm/datafile/sysaux.3525.1063123807							     SYSAUX
    +DATA/scm/datafile/undotbs1.3526.1063123815							     UNDOTBS1
    +DATA/scm/datafile/users.3528.1063123825							     USERS
    +DATA/scm/datafile/scm.2462.1063129773								     SCM
    创建 bigfile 类型表空间 
    SQL> create bigfile tablespace bigtbs_01 datafile '+DATA/scm/datafile/bigtbs_01.dbf' SIZE 20M AUTOEXTEND ON;
    
    Tablespace created. 
    创建用户,指定表空间,并创建表
    SQL> CREATE USER bigtbs_01
      IDENTIFIED BY "bigtbs_01"
      DEFAULT TABLESPACE bigtbs_01
      TEMPORARY TABLESPACE TEMP
      PROFILE DEFAULT
      ACCOUNT UNLOCK;  2    3    4    5    6  
    
    User created.
    
    SQL>   GRANT CONNECT TO bigtbs_01;
      GRANT DBA TO bigtbs_01;
      GRANT RESOURCE TO bigtbs_01;
      ALTER USER bigtbs_01 DEFAULT ROLE ALL;
    Grant succeeded.
    
    SQL> 
    Grant succeeded.
    
    SQL> 
    Grant succeeded.
    
    SQL> conn bigtbs_01/bigtbs_01
      2  ;
      ALTER USER bigtbs_01 DEFAULT ROLE ALL;conn bigtbs_01/bigtbs_01
                                           *
    ERROR at line 1:
    ORA-00911: invalid character
    
    
    SQL> 
    SQL> conn bigtbs_01/bigtbs_01
    Connected.
    SQL> create table tb_objets1 as select * from all_objects;
    
    Table created.
    
    SQL> select count(*) from tb_objets1;
    
      COUNT(*)
    ----------
         84385
    	 
    迁移表空间数据文件
    1 创建迁移路径(注意权限)
    表空间:bigtbs_01
    数据文件:'+DATA/scm/datafile/bigtbs_01.dbf'
    迁移前路径:'+DATA/scm/datafile'
    迁移后路径: '+DATA/tb_remove'
    ASMCMD> ls
    DATA/
    ASMCMD> cd data
    ASMCMD> ls
    CAD/
    CADD/
    SCM/
    rac-cluster/
    ASMCMD> mkdir tb_remove
    ASMCMD> ls
    CAD/
    CADD/
    SCM/
    rac-cluster/
    tb_remove/
    ASMCMD> cd tb_remove
    ASMCMD> ls
    ASMCMD> pwd
    +data/tb_remove
    查看路径
    SQL> select FILE_NAME,TABLESPACE_NAME from dba_data_files;
    
    FILE_NAME											     TABLESPACE_NAME
    ---------------------------------------------------------------------------------------------------- ------------------------------
    +DATA/scm/datafile/system.3524.1063123799							     SYSTEM
    +DATA/scm/datafile/sysaux.3525.1063123807							     SYSAUX
    +DATA/scm/datafile/undotbs1.3526.1063123815							     UNDOTBS1
    +DATA/scm/datafile/users.3528.1063123825							     USERS
    +DATA/scm/datafile/scm.2462.1063129773								     SCM
    +DATA/scm/datafile/bigtbs_01.dbf								     BIGTBS_01
    SQL> ALTER TABLESPACE bigtbs_01 OFFLINE;
    
    Tablespace altered.
    SQL> ! cp '+DATA/scm/datafile/bigtbs_01.dbf' '+DATA/tb_remove/bigtbs_01.dbf' # asm 不能使用此方式copy文件
    cp: cannot stat `+DATA/scm/datafile/bigtbs_01.dbf': No such file or directory
    使用此方式copy
    ASMCMD> cp '+DATA/scm/datafile/bigtbs_01.dbf' '+DATA/tb_remove/bigtbs_01.dbf'
    copying +DATA/scm/datafile/bigtbs_01.dbf -> +DATA/tb_remove/bigtbs_01.dbf
    ASMCMD> ls
    bigtbs_01.dbf
    修改 oracle 表空间指向地址
    SQL> alter database rename file '+DATA/scm/datafile/bigtbs_01.dbf' to '+DATA/tb_remove/bigtbs_01.dbf';
    
    Database altered.
    SQL> alter tablespace bigtbs_01 online;
    
    Tablespace altered.
    删除之前的数据文件
    ASMCMD> rm '+DATA/scm/datafile/bigtbs_01.dbf'
    ASMCMD> ls +DATA/scm/datafile/ #之前的已经被删除掉
    SCM.1634.1036077843
    SCM.2462.1063129773
    SDE_TBS.1699.1038279159
    SYSAUX.3525.1063123807
    SYSAUX.723.1035912181
    SYSTEM.3524.1063123799
    SYSTEM.724.1035912175
    UNDOTBS1.3526.1063123815
    UNDOTBS1.722.1035912187
    USERS.3528.1063123825
    USERS.714.1035912197
    
    重新连接查看
    SQL> conn bigtbs_01/bigtbs_01
    Connected.
    SQL> select count(*) from tb_objets1;
    
      COUNT(*)
    ----------
         84385
    查看迁移后的数据文件
    SQL> select FILE_NAME,TABLESPACE_NAME from dba_data_files;
    
    FILE_NAME											     TABLESPACE_NAME
    ---------------------------------------------------------------------------------------------------- ------------------------------
    +DATA/scm/datafile/system.3524.1063123799							     SYSTEM
    +DATA/scm/datafile/sysaux.3525.1063123807							     SYSAUX
    +DATA/scm/datafile/undotbs1.3526.1063123815							     UNDOTBS1
    +DATA/scm/datafile/users.3528.1063123825							     USERS
    +DATA/scm/datafile/scm.2462.1063129773								     SCM
    +DATA/tb_remove/bigtbs_01.dbf									     BIGTBS_01
    创建表
    SQL> create table tb_objets as select * from all_objects;
    
    Table created.
    
    SQL> select count(*) from tb_objets;
    
      COUNT(*)
    ----------
         84386
    查看用户的表与表空间
    SQL> select table_name,tablespace_name from user_tables;
    
    TABLE_NAME		       TABLESPACE_NAME
    ------------------------------ ------------------------------
    TB_OBJETS1		       BIGTBS_01
    TB_OBJETS		       BIGTBS_01 

    操作截图  

    迁移后

     操作

     

     

     

      

      

  • 相关阅读:
    大数计算问题
    句子逆序
    字符个数统计
    提取不重复的整数
    合并表记录
    浅谈之高级查询over(partition by)
    proc之建表添加数据报错解决
    浅谈之过滤条件【or】
    浅谈之索引失效
    浅谈之表连接方法
  • 原文地址:https://www.cnblogs.com/yhq1314/p/15790802.html
Copyright © 2011-2022 走看看