当前位置:  数据库>oracle

Oracle实验(move表空间和database link)

    来源: 互联网  发布时间:2017-06-03

    本文导语: 一、 实验一 a) 实验要求: i. 将vip用户下的表 move到DATA表空间中,达到整理表的碎片的目的;--我认为应该是检查某个或某些表空间的使用情况,来针对表空间的表进行碎片整理,而不应该是针对用户的,除非该用户下的表都在...

一、 实验一

a) 实验要求:

i. 将vip用户下的表 move到DATA表空间中,达到整理表的碎片的目的;--我认为应该是检查某个或某些表空间的使用情况,来针对表空间的表进行碎片整理,而不应该是针对用户的,除非该用户下的表都在同一个表空间里,且该表空间存在大量碎片,否则命题不太清晰。
 
ii. 观察move以后,表会发生哪些变化;以及对相关的查询有何影响;

b) 实验分析:

i. 目的分析:通过move表达到整理表的碎片的目的。因为数据库中的表经历了多次的DML操作后,会在表空间里产生很多碎片,大大影响存储效率和查询效率。

ii. 技术分析:为了消除碎片可以采用移动表的方法解决;就是一个表空间的所有表移动到一个干净的表空间中,由于对表进行了移动,在表上创建的索引将失效,所以在移动表的同时也要将表的索引重建。不对临时表进行移动。
 
iii. 场景分析:不管是OLTP还是OLAP系统,其中频繁做DML操作的表都会产生很多碎片,OLTP的特点是每次DML的记录条数较少,但是很频繁,OLAP的特点是每次都是批量DML操作,涉及记录条数很多,尤其是在ETL的过程中,但是操作很集中。
 
c) 实验过程:

i. 备份:将vip用户用数据泵备份出来

expdp vip/vip@PROD directory=dir1 dumpfile=expdp_vip schemas=vip

ii. 检查碎片:

如何检查?

VIP@PROD>col table_name for a12;

VIP@PROD>col tablespace_name for a6;

VIP@PROD>select table_name,tablespace_name,status,num_rows,blocks,empty_blocks from user_tables where table_name='COUNTRIES2';

TABLE_NAME TABL STATUS NUM_ROWS BLOCKS EMPTY_BLOCKS

------------ ---- -------- ---------- ---------- ------------

COUNTRIES2 SYSTEM VALID 19 4 0

分析碎片的方法:??还不会

参考文档:

iii. 收集信息:

1. 查看当前库中有哪些表空间,如果没有要求的DATA表空间,则需要新建
SYS@PROD>select tablespace_name, status from dba_tablespaces;

TABLESPACE_NAME STATUS

------------------------------ ---------

SYSTEM ONLINE

SYSAUX ONLINE

UNDOTBS1 ONLINE

TEMPTS1 ONLINE

TUNING_TBS ONLINE

2. 查看需要move表的用户下的所有对象及其所在表空间
select segment_name, partition_name, segment_type, tablespace_name, trim(bytes/1024/1024) M from user_segments;

发现segment_type包括”TABLE”、”TABLE PARTITION”、”INDEX”三大类段对象,需要分别进行处理。结果请参考

3. 统计segment大小,以确定新建表空间的指定大小等参数
VIP@PROD>select sum(bytes)/1024/1024 from user_segments;

SUM(BYTES)/1024/1024

--------------------

98.375

 

4. 查看磁盘空间大小

 


SYS@PROD>host df -h

文件系统 容量 已用 可用 已用% 挂载点

/dev/mapper/VolGroup00-LogVol00

26G 15G 9.7G 60% /

/dev/sda1 99M 23M 72M 24% /boot

tmpfs 1007M 400M 607M 40% /dev/shm

/dev/sr0 3.1G 3.1G 0 100% /media/OL5.8 i386 dvd 20120229

 

5. 检查索引状态

 


select index_name,table_name,tablespace_name,status from user_indexes;

 

结果参考

iv. 执行:

1. 新建表空间DATA

 


drop tablespace DATA including contents and datafiles;

create tablespace DATA datafile '/u01/app/Oracle/oradata/PROD/disk1/DATA01.dbf' size 150M autoextend on next 1m maxsize 1g extent management local segment space management auto;

 

2. 移动表

 


conn / as sysdba

Alter user vip QUOTA unlimited ON DATA;

 


conn vip/vip

alter table 表名 move tablespace DATA; -- segment_type=’TABLE’

alter table 分区表表名 move partition 分区名 tablespace DATA;--segment_type=’TABLE PARTITION’

脚本

 

3. 移动后检查索引状态

 


select index_name,table_name,tablespace_name,status from user_indexes; --均显示为INVALID

 

4. 重建索引

 


alter index 索引名rebuild tablespace DATA[online];

 

5. 重建后检查索引状态

 


select index_name,table_name,tablespace_name,status from user_indexes; --VALID

 

v. 错误处理

重新执行下面的语句发现有两个segment的表空间还是system没有改为DATA,检查日志发现有两处报错:

 


select segment_name, partition_name, segment_type, tablespace_name, trim(bytes/1024/1024) M from user_segments;

 

1. alter index COUNTRY_C_ID_PK rebuild tablespace DATA

*

ERROR at line 1:

ORA-28650: Primary index on an IOT cannot be rebuilt

解决:IOT表上的Primary index不能rebuild,只能作如下操作:

 


VIP@PROD>select index_name,table_name,status,tablespace_name from user_indexes where index_name='COUNTRY_C_ID_PK';

INDEX_NAME TABLE_NAME STATUS TABLESPACE_NAME

------------------------------ ------------------------------ -------- ------------------------------

COUNTRY_C_ID_PK COUNTRIES VALID SYSTEM

VIP@PROD>select table_name,tablespace_name,iot_name,status from user_tables where table_name='COUNTRIES';

TABLE_NAME TABLESPACE_NAME IOT_NAME STATUS

------------------------------ ------------------------------ ------------------------------ --------

COUNTRIES VALID

--对于IOT而言,只有索引段,没有数据段,也就不存在move到另一个表空间的说法。

常用的rebuild操作不能使用在IOT主键索引中,而且disable索引也没有办法实现。整理IOT的方法,可以选择数据表的move方法。

VIP@PROD>alter table COUNTRIES move;

Table altered.

效果是可以将存在大量死叶子节点的IOT表的索引高水位线下降。参考文章:

 

2. alter table CUSTOMER move tablespace DATA

*

ERROR at line 1:

ORA-00997: illegal use of LONG datatype

查看一下CUSTOMER表的结构:

VIP@PROD>desc customer

Name Null? Type

--------------------- -------- ------------

CUSTOMER_ID NOT NULL NUMBER(6)

NAME VARCHAR2(45)

ADDRESS VARCHAR2(40)

CITY VARCHAR2(30)

STATE VARCHAR2(2)

ZIP_CODE VARCHAR2(9)

AREA_CODE NUMBER(3)

PHONE_NUMBER NUMBER(7)

SALESPERSON_ID NUMBER(4)

CREDIT_LIMIT NUMBER(9,2)

COMMENTS LONG

问题可能就出在最后一个字段:COMMENTS LONG

解决:

 


If you get an "ORA-00997: illegal use of LONG datatype" error, metalink (note 165901.1) advises you to
1. Export the table.
2. Recreate the table in the new tablespace.
3. Import the table.

对于Oracle来说,LONGs are deprecated since 8.0 ,建议将LONG/LONG RAW类型改为BLOB/CLOB等。

 

vi. move以后,表会发生哪些变化;以及对相关的查询有何影响

 


VIP@PROD>select sum(bytes)/1024/1024 from user_segments;

SUM(BYTES)/1024/1024

--------------------

99.6875—为什么会比move之前大?

除此之外,还应该检查新表空间DATA的碎片情况,和之前在SYSTEM表空间时,SYSTEM表空间的碎片情况进行对比:

?如何做?


    
 
 

您可能感兴趣的文章:

  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 所有的Oracle9 i Database选件在Linux上都可用
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Oracle 2010年7月更新修复多个Oracle Database安全漏洞
  • Oracle 9i DataBase 支持 P4 吗?
  • Oracle Database Lite
  • 有人在fedora 10下安装 oracle database 11g,没有呀?提供个安装步骤
  • 谁那里有《Oracle Database 10g完全参考手册》中文版的电子书啊?发给我好吗
  • Linux下启动Oracle database EM及isqlplus等命令
  • 在Linux中安裝Oracle Database 10g時切換root帳戶時出現﹕-bash: eth0 commond not found,這是怎么 回事?各位大仙的幫一下
  • Oracle Database 建立与查询 Sequence
  • Oracle Database 11g Release 2 For Linux发布
  • 在Oracle下创建database link两种方法
  • DBA 在Linux下安装Oracle Database11g数据库图文教程
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • oracle查看表空间已分配和未分配空间的语句分享
  • shell脚本操作oracle删除表空间、创建表空间、删除用户
  • oracle 创建表空间步骤代码
  • oracle增加表空间大小两种实现方法
  • RedHat8上解压Oracle9磁盘丢失磁盘空间,请大虾帮忙!
  • ORACLE数据库空间整理心得
  • oracle9i 在 redhat7.3 上安装临时目录空间不够.
  • Oracle 10g创建表空间和用户并指定权限
  • Linux下Oracle传输表空间高手支招
  • Oracle释放undo表空间
  • oracle 创建表空间详细介绍
  • 在linux下装oracle9i到了最后时候,提示/tmp空间不够了,怎么增加,谢谢!
  • 查看修改Oracle10G归档日志空间的限制
  • [小技巧]手工扩大Oracle数据库表空间的方法
  • Oracle回滚段空间回收步骤
  • Oracle数据库手工扩大表空间的方法
  • Oracle tablespace表空间调整
  • 新手求助:RedHat安装oracle 11g 检测空间不足
  • Oracle安装过程中物理内存检查及临时temp空间不足问题解决
  • Oracle 10g表空间创建的完整步骤
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • ORACLE日期相关操作


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,