Oracle 遇到的问题 (1)

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 '%$%'

原文地址:https://www.cnblogs.com/huxiaoli/p/6101363.html