热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle实验(move表空间和databaselink)

将vip用户下的表move到DATA表空间中,达到整理表的碎片的目的;--我认为应该是检查某个或某些表空间的使用情况,来针对表空间的

将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

解决:

推荐阅读
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文描述了作者第一次参加比赛的经历和感受。作者是小学六年级时参加比赛的唯一选手,感到有些紧张。在比赛期间,作者与学长学姐一起用餐,在比赛题目中遇到了一些困难,但最终成功解决。作者还尝试了一款游戏,在回程的路上感到晕车。最终,作者以110分的成绩取得了省一会的资格,并坚定了继续学习的决心。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 关羽败走麦城时路过马超封地 马超为何没有出手救人
    对当年关羽败走麦城,恰好路过马超的封地,为啥马超不救他?很感兴趣的小伙伴们,趣历史小编带来详细的文章供大家参考。说到英雄好汉,便要提到一本名著了,没错,那就是《三国演义》。书中虽 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
author-avatar
看具戴_370
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有