Oracle 遇到的问题
Posted 我只愿面朝大海、春暖花开
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 遇到的问题相关的知识,希望对你有一定的参考价值。
1、ORA-01502:索引‘DBEPMS.SYS_C009390‘或这类索引的分区处于不可用状态
解决方法:[注 索引命名规则 IX_表名简称_列名简称/IX_表名简称_序号(索引长度在30字符以内)]
(1) 重建索引: alter index index_name rebuild;
(2) 如果是分区索引,只需要重建那个失效的分区 alter index index_name rebuild partition partition_name ;
(3) 或者改变当前索引的名字 alter index index_name rename to new_index_name
2、查询当前用户哪个索引无效(VAILD说明这个索引可用,UNUSABLE说明这个索引不可用,USABLE 说明这个索引的分区是可用的)
select index_name from user_indexes where status <> ‘VALID‘;--查出所有不可用索引进行全部重建
3、修改索引表空间(正式库索引表空间是I_JSEPMS)
alter index 索引名称 rebuild tablespace tablespace_name;
4、创建索引语法[注:索引命名规则 IX_表名简称_列名简称/IX_表名简称_序号(索引长度在30字符以内)]
--普通索引(tablespace tablespace_name;指定索引空间,正式库索引空间为I_JSEPMS) create index 索引名 on 表名 (列名) tablespace tablespace_name; --单列
create index I索引名 on 表名 (列名[, 列名, ....]) tablespace tablespace_name; --可以有多个列
--唯一索引 create unique 索引名 on 表名 (列名) tablespace tablespace_name; --单列
create unique 索引名 on 表名 (列名[, 列名, ....]) tablespace tablespace_name; --可以有多个列
5、删除索引
drop index index_name;
6、若想进行删除表操作,请先释放表空间再删除表
alter table EAF_UploadFile deallocate UNUSED KEEP 0;--释放表空间
drop table tablename;
7、无意中创建序列,需删除
drop sequence sequence_name;
8、查询表空间大小及路径
select b.file_name 物理文件名, b.tablespace_name 表空间, b.bytes / 1024 / 1024 大小M, (b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 已使用M, substr((b.bytes - sum(nvl(a.bytes, 0))) / (b.bytes) * 100, 1, 5) 利用率 from dba_free_space a,dba_data_files b where a.file_id = b.file_id group by b.tablespace_name,b.file_name, b.bytes order by b.tablespace_name;
9、查询Oracle正式数据库中表中数据条数
select table_name, count_rows(table_name) nrows from user_tables order by table_name asc;
10、查询SQL数据库表中数据条数
SELECT a.name, b.rows FROM sysobjects a INNER JOIN sysindexes b ON a.id = b.id WHERE (a.type = ‘u‘) AND (b.indid IN (0, 1)) ORDER BY a.name,b.rows DESC
11、若执行SQL语句时 报错ORA-00054:资源正忙,要求指定NOWAIT(首先具备DBA授予的v$lock和v$session对象权限)
解决方案: --查看那个用户那个进程照成死锁 select b.username, b.sid, b.serial#, logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time; d;
这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。
--下面我们杀掉死锁进程 sid,serial#
alter system kill session‘sid,serial#‘;
12、查出来表名,索引名,索引列
SELECT table_name, index_name, column_name, column_position FROM user_ind_columns WHERE (index_name like ‘SYS_%‘ or index_name like ‘IX_%‘) and Table_name not like ‘%$%‘
--查询新增索引个数不包含系统默认创建索引
select distinct index_name from user_ind_columns WHERE index_name like ‘IX_%‘ and Table_name not like ‘%$%‘
以上是关于Oracle 遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章