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 

操作截圖  

遷移后

 

 操作

 

 

 

 

 

 

 

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM