移动用户及其对象到新的表空间试验

注意:本实验为不含有lob对象用户
用户:lizi  原表空间:lizi  新表空间:lizi1

查看用户情况:
SQL> select * from dba_users where username='LIZI';
USERNAME                          USER_ID PASSWORD                       ACCOUNT_STATUS                   LOCK_DATE
EXPIRY_DA DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE        CREATED   PROFILE                       
INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ---------- ------------------------------ -------------------------------- ---------
--------- ------------------------------ ------------------------------ --------- ------------------------------ --
----------------------------
EXTERNAL_NAME
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------
LIZI                                   59 FA00A8A82502557E               OPEN                                       
         LIZI                           TEMP                        23-AUG-10 DEFAULT                       
DEFAULT_CONSUMER_GROUP

查看索引情况:
SQL> CONN LIZI/LIZI
Connected.
SQL> select INDEX_NAME,INDEX_TYPE from user_indexes where INDEX_NAME='INDEX_CODE';
INDEX_NAME                     INDEX_TYPE
------------------------------ ---------------------------
INDEX_CODE                     NORMAL
SQL> select INDEX_NAME,INDEX_TYPE,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes where
INDEX_NAME='INDEX_CODE';
INDEX_NAME                     INDEX_TYPE                  TABLE_OWNER                    TABLE_NAME                
    TABLESPACE_NAME
------------------------------ --------------------------- ------------------------------ -------------------------
----- ------------------------------
INDEX_CODE                     NORMAL                      LIZI                           TESTA                     
    LIZI

查看lizi表空间里所包含的对象及大小:
SQL> select SEGMENT_NAME,bytes/1024/1024 from user_segments where TABLESPACE_NAME='LIZI';
SEGMENT_NAME                                                                      BYTES/1024/1024
--------------------------------------------------------------------------------- ---------------
TESTA                                                                                          12
INDEX_CODE                                                                                 12.125
BIN$j0IxSSwYRizgQM3KBLIWtg==$0                                                              .0625
 
BIN$j0IxSSwYRizgQM3KBLIWtg==$0这个对象还不知道是什么
 
SQL> select sum(bytes)/1024/1024 from user_segments where Segment_Name='INDEX_CODE';
SUM(BYTES)/1024/1024
--------------------
              12.125

创建lizi1表空间,移动表跟索引:
 
SQL> EXIT
Disconnected from Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
[oracle@XS-I620-01 ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.1.0.3.0 - Production on Thu Sep 2 15:36:50 2010
Copyright (c) 1982, 2004, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> SELECT * FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='LIZI';
FILE_NAME
--------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS
---------- ------------------------------ ---------- ---------- ---------
RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
------------ --- ---------- ---------- ------------ ---------- -----------
/home/O10G/O10G/lizi.dbf
         5 LIZI                             52428800       6400 AVAILABLE
           5 YES 3.4360E+10    4194302         1280   52363264        6392

SQL> CREATE TABLESPACE lizi1
  2      DATAFILE '/home/O10G/O10G/lizi1.dbf' SIZE 50M autoextend on next 10m
  3      maxsize unlimited
  4      EXTENT MANAGEMENT LOCAL;
Tablespace created.

SQL> alter table testa move tablespace lizi1;
alter table testa move tablespace lizi1
*
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> show user;
USER is "SYS"
SQL> conn lizi/lizi;----------------------注意必须使用所要移动的用户来操作
Connected.
SQL> alter table testa move tablespace lizi1;
Table altered.
SQL> alter index INDEX_code rebuild tablespace lizi1;
Index altered.

SQL> set linesize 1000
SQL> set pagesize 1000
SQL> select SEGMENT_NAME,bytes/1024/1024,TABLESPACE_NAME from user_segments where TABLESPACE_NAME='LIZI';
SEGMENT_NAME                                                                      BYTES/1024/1024 TABLESPACE_NAME
--------------------------------------------------------------------------------- --------------- -----------------
-------------
BIN$j0IxSSwYRizgQM3KBLIWtg==$0                                                              .0625 LIZI
SQL> select SEGMENT_NAME,bytes/1024/1024,TABLESPACE_NAME from user_segments where TABLESPACE_NAME='LIZI1';
SEGMENT_NAME                                                                      BYTES/1024/1024 TABLESPACE_NAME
--------------------------------------------------------------------------------- --------------- -----------------
-------------
TESTA                                                                                          12 LIZI1
INDEX_CODE                                                                                     18 LIZI1
SQL> select INDEX_NAME,INDEX_TYPE,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes where
INDEX_NAME='INDEX_CODE';
INDEX_NAME                     INDEX_TYPE                  TABLE_OWNER                    TABLE_NAME                
    TABLESPACE_NAME
------------------------------ --------------------------- ------------------------------ -------------------------
----- ------------------------------
INDEX_CODE                     NORMAL                      LIZI                           TESTA                     
    LIZI1
SQL> select * from dba_users where username='LIZI';
select * from dba_users where username='LIZI'
              *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select SEGMENT_NAME,bytes/1024/1024,TABLESPACE_NAME from user_segments where TABLESPACE_NAME='LIZI1';
SEGMENT_NAME                                                                      BYTES/1024/1024 TABLESPACE_NAME
--------------------------------------------------------------------------------- --------------- -----------------
-------------
TESTA                                                                                          12 LIZI1
INDEX_CODE                                                                                     18 LIZI1
SQL> CONN SYS/Oracle10 as sysdba
Connected.
SQL> select * from dba_users where username='LIZI';
USERNAME                          USER_ID PASSWORD                       ACCOUNT_STATUS                   LOCK_DATE
EXPIRY_DA DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE        CREATED   PROFILE                       
INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ---------- ------------------------------ -------------------------------- ---------
--------- ------------------------------ ------------------------------ --------- ------------------------------ --
----------------------------
EXTERNAL_NAME
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------
LIZI                                   59 FA00A8A82502557E               OPEN                                       
         LIZI                           TEMP                        23-AUG-10 DEFAULT                       
DEFAULT_CONSUMER_GROUP
 
可以看到用户还没有移动到新的表空间
移动用户到新的表空间:
SQL> alter user lizi default tablespace lizi1;
User altered.
SQL> select * from dba_users where username='LIZI';
USERNAME                          USER_ID PASSWORD                       ACCOUNT_STATUS                   LOCK_DATE
EXPIRY_DA DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE        CREATED   PROFILE                       
INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ---------- ------------------------------ -------------------------------- ---------
--------- ------------------------------ ------------------------------ --------- ------------------------------ --
----------------------------
EXTERNAL_NAME
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------
LIZI                                   59 FA00A8A82502557E               OPEN                                       
         LIZI1                          TEMP                        23-AUG-10 DEFAULT                       
DEFAULT_CONSUMER_GROUP

向该用户下的表插入数据测试:
SQL> select 
  2      total.tablespace_name,  
  3      round(total.MB,2) as Total_MB,  
  4      round(total.MB-free.MB, 2) as Used_MB,  
  5      round((1-free.MB/total.MB)*100, 2) as Used_Pct  
  6   from 
  7      (select tablespace_name, sum(bytes)/1024/1024 as MB from dba_free_space group by tablespace_name) free,  
  8      (select tablespace_name, sum(bytes)/1024/1024 as MB from dba_data_files group by tablespace_name) total  
  9   where 
 10      free.tablespace_name=total.tablespace_name;
TABLESPACE_NAME                  TOTAL_MB    USED_MB   USED_PCT
------------------------------ ---------- ---------- ----------
EDU2009                              5000        .06          0
LIZI                                   50        .06        .13
LIZI1                                  50      30.06      60.13
SYSAUX                                410     385.81       94.1
SYSTEM                                460        455      98.91
UNDOTBS1                              220      10.25       4.66
USERS                              836.25     835.13      99.87
7 rows selected.
SQL> conn lizi/lizi
Connected.
SQL> select count(*) from testa;
  COUNT(*)
----------
   1000000
SQL> timing start;
SQL> declare var number :=1;
  2  BEGIN
  3  while (var<=1000000) LOOP
  4  insert into testa(code) values(var);
  5  var:=var+1;
  6  END LOOP;
  7  END;
  8  /
timing stop;

PL/SQL procedure successfully completed.
SQL> Elapsed: 00:01:49.06
SQL> SQL>
SQL>
SQL> select count(*) from testa;
  COUNT(*)
----------
   2000000
SQL> conn sys/Oracle10 as sysdba;
Connected.
SQL> select                     
  2      total.tablespace_name,  
  3      round(total.MB,2) as Total_MB,  
  4      round(total.MB-free.MB, 2) as Used_MB,  
  5      round((1-free.MB/total.MB)*100, 2) as Used_Pct  
  6   from 
  7      (select tablespace_name, sum(bytes)/1024/1024 as MB from dba_free_space group by tablespace_name) free,  
  8      (select tablespace_name, sum(bytes)/1024/1024 as MB from dba_data_files group by tablespace_name) total  
  9   where 
 10      free.tablespace_name=total.tablespace_name;
TABLESPACE_NAME                  TOTAL_MB    USED_MB   USED_PCT
------------------------------ ---------- ---------- ----------
EDU2009                              5000        .06          0
LIZI                                   50        .06        .13
LIZI1                                  70      60.06       85.8
SYSAUX                                410     385.81       94.1
SYSTEM                                460        455      98.91
UNDOTBS1                              220     196.63      89.38
USERS                              836.25     835.13      99.87
7 rows selected.
至此可以发现新的表空间发生了明显变化,移动完成。

作者: lizisor   发布时间: 2010-09-03