首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
为何有时Oracle用索引来查找数据,Oracle数据库常见错误操作及解决方案
发布时间:2019-12-25 16:26
浏览次数:

在Oracle 10G中,引入了一个回收站(Recycle Bin)的概念. 回收站,从原理上来说就是一个数据字典表,放置用户Drop掉的数据库对象信息.用户进行Drop操作的对象并没有被数据库删除,仍然会占用空间.除非是由于用户手工进行Purge或者因为存储空间不够而被数据库清掉.数据库有了这样的功能,能够减少很多不必要的麻烦.常常看到开发人员误把表删除,急急忙忙找DBA来想办法的情况,相信,随着10G的大范围应用,这种情形应该比较少见了. DBA管理上的相关信息可以从USER_recyclebin(DBA_recyclebin)中获取.从现在的Beta版本来看,手册上所说的通过SQL*Plus的show recycle bin 命令查看还不可用. 为了便于测试,我们创建了一个表空间Foo,大小为1M,创建了一个用户Foo,默认的表空间为Foo.

在Linux下使用Oracle 8以前,应当安装Oracle 8,但Oracle公司提供的安装文档较为简单。笔者借鉴其在Unix操作系统下的安装方法,得出了在Linux上安装Oracle 8的方法,此方法并不一定是最好的,使各位读者用上Oracle 8才是本文的目的。

ORA-01650:unable to extend rollback segment NAME by NUM intablespace NAME

您正在看的ORACLE教程是:为何有时Oracle用索引来查找数据?。

------------------------------------ SQL CONNECT foo/foo 已连接。

前期准备

产生原因:上述Oracle错误为回滚段表空间不足引起的,这也是ORACLE数据治理员最常见的ORACLE错误信息。当用户在做一个非常庞大的数据操作导致现有回滚段的不足,使可分配用的回滚段表空间已满,无法再进行分配,就会出现上述的错误。

当你运用SQL语言,向数据库发布一条查询语句时,ORACLE将伴随产生一个“执行计划”,也就是该语句将通过何种数据搜索方案执行,是通过全表扫描、还是通过索引搜寻等其它方式。搜索方案的选用与ORACLE的优化器息息相关。

SQL SELECT table_name FROM user_tables;

假定安装环境是Red Hat Linux,请在安装前确认Linux的核心版本为2.0.36及以上。

解决方式:使用“ALTER TABLESPACE tablespace_name ADD DATAFILE filename SIZE size_of_file”命令向指定的数据增加表空间,根据具体的情况可以增加一个或多个表空间。当然这与还与你主机上的裸盘设备有关,假如你主机的裸盘设备已经没有多余的使用空间,建议你不要轻意的增加回滚段表空间的大小,可使用下列的语句先查询一下剩余的tablespace空间有多少: Select user_name,sql_text from V$open_cursor where user_name=’user_name’;

SQL语句的执行步骤

未选定行

1.以Root用户登录进入系统,创建用户oracle和组dba,这是Oracle默认的安装用户。创建安装用户后,用tar -xvzf 将压缩文件解压到一个指定的目录,本文假定为/oracle,因为tar进行数据归档与用户本机的用户ID、组ID不同,所以要运行chown -R oracle:dba 以更改文件属性。

假如多余的空间比较多,就可以适当追加一个大的回滚段给表空间使用,从而避免上述的错误。你也可以用以下语句来检测一下rollback segment的竞争状况: Select class,count from V$waitstat where calss in(‘system undo header’,’ system undo block’,’undo header’,’undo block’);

一条SQL语句的处理过程要经过以下几个步骤。

SQL DESC user_recyclebin 名称 是否为空? 类型 -------------------------------------- ...... ...... user_recyclebin大多是自解释的,涵义比较容易理解.

2.由于Oracle本身对共享段的要求,用户必须重新手工生成核心,以便共享段的设定满足安装要求。为生成核心,用户应当安装Linux操作系统的源代码,编辑/usr/src/linux/include/shmparam.h,将#define SHMMAX 0x002000000一行的0x002000000(32MB)改为256MB以上,然后在/usr/src/linux下运行make dep、make clean、make bzImage生成核心,使用linuxconf命令将新核心设为启动核心。这一步一定要做,如果生成的新核心有错,可以用原来的核心启动计算机。可用ipc -ml查看共享段的设置是否满足要求。当共享段大于2GB时,查看到的值是负数。

和 Select sum(value) from V$sysstat where name in (‘db_block_gets’,’consistents gets’);

1 语法分析 分析语句的语法是否符合规范,衡量语句中各表达式的意义。

SQL SELECT object_name FROM user_recyclebin;

3.安装相应的egc包。假定安装光盘mount在/mnt/cdrom上,用命令modprobe isofs使操作系统能处理光盘的文件系统,然后运行mount -t iso9660 /dev/cdrom /mnt/cdrom,如在安装后修改了/etc/fstab,可不进行这一步操作。进入相应的RPMS目录,安装以egc开始的包,采用的安装命令为rpm -ivh 包名。

假如任何一个class in count/sum(value)大于1%,就应该考虑增加rollback segment。

2 语义分析 检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。

未选定行

设定安装的环境变量

ORA-01652:unable to extend temp segment by num in tablespace name 产生原因:ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象。 解决方法:我们知道由于ORACLE将表空间作为逻辑结构-单元,而表空间的物理结构是数据文件,数据文件在磁盘上物理地创建,表空间的所有对象也存在于磁盘上,为了给表空间增加空间,就必须增加数据文件。先查看一下指定表空间的可用空间,使用视图SYS.DBA_FREE_SPACE,视图中每条记录代表可用空间的碎片大小: SQLSelect file_id,block_id,blocks,bytes from sys.dba_free_space where tablespace_name= ’users’;

3 视图转换 将涉及视图的查询语句转换为相应的对基表查询语句。

SQL CREATE TABLE foo AS SELECT * FROM DUAL; 表已创建。

安装前,应该设定相应的环境变量。修改用户Oracle的.bash―profile文件,设定相应的环境变量。由于安装系统时需要Root用户,也要有这些环境变量,故将其放在/etc/profile内,加*号为Oracle专有的环境变量,示例如下:

返回的信息可初步确定可用空间的最大块,看一下它是否小于错误信息中提到的尺寸,再查看一下缺省的表空间参数:

4 表达式转换 将复杂的SQL表达式转换为较简单的等效连接表达式。

SQL SELECT table_name FROM user_tables;

# /etc/profile

SQLSELECT INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,PCT_INCREASE FROM SYS.DBA_TABLESPACES WHERE TABLESPACE_NAME=name;

5 选择优化器 不同的优化器一般产生不同的“执行计划”

TABLE_NAME ------------------------------ FOO

# System wide environment and startup programs

通过下面的SQL命令修改临时段表空间的缺省存储值: SQLALTER TABLESPACE name DEFAULT STORAGE (INITIAL XXX NEXT YYY);

6 选择连接方式 ORACLE有三种连接方式,对多表连接ORACLE可选择适当的连接方式。

SQL DROP TABLE foo;

# Functions and aliases go in /etc/bashrc

适当增大缺省值的大小有可能解决出现的错误问题,也可以通过修改用户的临时表空间大小来解决这个问题: SQLALTER USER username TEMPORARY TABLESPACE new_tablespace_name;

7 选择连接顺序 对多表连接ORACLE选择哪一对表先连接,选择这两表中哪个表做为源数据表。

友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有