ITPub博客

首页 > 数据库 > Oracle > oracle基础管理——表空间和数据文件

oracle基础管理——表空间和数据文件

原创 Oracle 作者:fiona8953 时间:2014-11-04 23:48:39 0 删除 编辑
//查看用户表空间
SQL> select t.default_tablespace from sys.dba_users t WHERE t.username='JUICE';     
DEFAULT_TABLESPACE 
------------------------------
USERS
//查看data文件的路径
[root@fiona2 orcl]# pwd
/u01/app/oracle/oradata/orcl
//创建表空间,一般都是用local表空间。
//字典管理表空间是通过数据字典表(UET$和FET$)来管理和记录,而这2个表通过文件号(file#)、数据块号(block#)等信息来管理空间的分配和回收,造成数据库性能瓶颈和空间碎片。
//本地管理表空间是通过在每个表空间的数据文件的头部加入了一个位图区域,在其中记录每个Extent的使用状况。自动分配(oracle按递增算法来分配空间)或UNIFORM(默认1MB)。
SQL> create tablespace juice datafile '/u01/app/oracle/oradata/orcl/juice01.dbf' size 10M
 extent management local uniform size 128k segment space management auto; 
Tablespace created. 
SQL> select tablespace_name,extent_management,allocation_type FROM dba_tablespaces where tablespace_name='JUICE';  
TABLESPACE_NAME                EXTENT_MAN       ALLOCATIO 
------------------------------              ----------               --------- 
JUICE                                     LOCAL                UNIFORM 
1 rows selected.
//使用dump方式,查看保留块记录的内容
SQL> alter system dump datafile 5 block max 3 block min 1; 
System altered. 
//由以下脚本获取当前会话DUMP文件路径,如果是想获取别的会话的DUMP文件路径,则修改SID即可。P227
 SELECT    d.VALUE 
      || '/'
    || LOWER (RTRIM (i.INSTANCE, CHR (0)))
    || '_ora_'
     || p.spid
      || '.trc' trace_file_name
FROM (SELECT p.spid
        FROM v$mystat m, v$session s, v$process p
         WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,
       (SELECT t.INSTANCE
          FROM v$thread t, v$parameter v
       WHERE v.NAME = 'thread'
          AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,
      (SELECT VALUE
         FROM v$parameter
      WHERE NAME = 'user_dump_dest') d;
SQL> select 'alter table ' || table_name || ' move tablespace users;' from user_tables where tablespace_name='SYSTEM';
 'ALTERTABLE'||TABLE_NAME||'MOVETABLESPACEUSERS;'
 -----------------------------------------------------------------
alter table PRODUCT move tablespace users;
SQL> alter table PRODUCT move tablespace juice; 
Table altered. 
SQL> select table_name from user_tables where tablespace_name='JUICE';
TABLE_NAME
------------------------------
PRODUCT
//使用如下方法,如果表的数据量很小的话可以考虑,如果数据量大的话重建索引会耗时比较长。 自己写批处理生成如下语句: 
alter table table1 move tablespace users; alter index index1 rebuild tablepsace users; alter user  user1 default tablespace users; 
例如 : select 'alter table ' || table_name || ' move tablespace users;' from user_tables where tablespace_name='SYSTEM'; 
//使用导入导出功能,耗时较短
例如将数据库中system用户的表导出 exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)  
注:如果用exp system/manager@TEST file=d:\daochu.dmp owner=(system),会将所有是system用户的表都导出,所以还是一个表一个表的写吧! 接着导入到user用户表 imp user/test@TEST fromuser=system touser=user file=d:\daochu.dmp,就可以了。
 
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26477398/viewspace-1320729/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-06-13

  • 博文量
    284
  • 访问量
    222494