oracle常用脚本

前一段时间做数据库日常管理、分析,一些脚本没有时间整理,现列出来,有空再整:
--oracle 常用sql
--查询数据库信息
select * from v$database;

--查询当前实例信息
select * from v$instance;

--查询数据库版本信息
select * from v$version;

--查询所有用户(dba权限)
select * from dba_users;

--查询共享内存中的sql信息,执行较慢
select hash_value from v$sqltext where sql_text like '%查询sql%';
select sql_text from v$sqltext where hash_value =查找的hash_value order by hash_value,piece;

--查询当前系统表空间存储信息
select a.file_id,a.file_name, a.TABLESPACE_NAME,a.bytes/1024/1024||'M' as totalspace,
nvl(b.freespace,0)||'M' as freespace,a.autoextensible from dba_data_files a,
(select sum(bytes)/1024/1024 as freespace,file_id,tablespace_name from dba_free_space
group by tablespace_name,file_id ) b
where a.file_id=b.file_id(+)
order  by a.tablespace_name,file_name;


--统计已占用的表空间
select sum(a.bytes/1024/1024-nvl(b.freespace,0))||'M' from dba_data_files a,
(select sum(bytes)/1024/1024 as freespace,file_id,tablespace_name from dba_free_space
group by tablespace_name,file_id ) b
where a.file_id=b.file_id(+) and a.tablespace_name='tablespace名称'

 

--查询当前活动session最近一次执行的sql
select sql_text from v$sqltext where hash_value=(
select   PREV_HASH_VALUE from v$session where status='ACTIVE' and username is not null ) order by piece

 

--查询相关用户的索引情况
select a.*,b.column_name,b.column_length from
(select owner,index_name,table_name,index_type,tablespace_name
from dba_indexes where owner ='用户名' and index_name not in
(select constraint_name from dba_constraints where owner='用户名' and constraint_type in ('P','R'))
)a,
(select * from dba_ind_columns b where index_owner='用户名') b
where a.index_name=b.index_name
order by a.owner,a.table_name,a.index_name

--重建索引
alter index 索引名称 rebuild nologging;



--查看事务回滚率
select name,value from v$sysstat where name in('user commits','transaction rollbacks');

 

 

--sql分析优化

--脚本位置${oracle_home}/rdbms/admin/utlxplan.sql 创建执行计划表
--授权访问
create public synonym plan_table for plan_table;
grant select,update,insert,delete on plan_table to public;
--脚本位置${oracle_home}/sqlplus/admin/plustrce.sql 执行授权角色

 

--spfile
--数据库建库完成后,第一次手工启动手工创建spfile文件,命令格式为
create spfile[='filename'] from pfile[='filename'];
--判断是采用spfile还是pfile启动数据库的,可以下面sql根据是那种方式
select decode(count(*),0,'pfile',1,'spfile') from V$spparameter where isspecified='TRUE' and rownum=1;

--spfile,pfile创建默认位置为$ORACLE_HOME/dbs/,$ORACLE_HOME/database/(windows)
--启动时公司搜索默认位置下spfile.ora,spfile$ORACLE_SID.ora,init$ORACLE_SID.ora
--采用指定的方式启动
startup pfile='filename';
--创建spfile,pfile可以在数据库关闭后仍然可以创建
--如果pfile内有spfile文件参数的设定,采用pfile方式启动后还可以修改初始参数到spfile中
--oracle9.2.0.1版本后创建数据库时系统会自动创建spfile,默认的启动方式就是采用spfile
--运行时间spfile文件没有锁定
--修改密码

alter user username identified by newpassword;
--oracle9i 验证方式有两种,可以在sqlnet.ora中配置
SQLNET.AUTHENTICATION_SERVICES=(NTS)   --操作系统验证,无须用户输入密码
SQLNET.AUTHENTICATION_SERVICES=(none) --用正确的用户和密码验证
--设置密码级别 remote_login_passwordfile
--设置为exclusive,表示口令文件由一个数据库使用 ,远程客户端可以用sys登陆(如果密码文件删除后,远程无法登陆)
--设置为shared,表示 多个数据库可以共享一个口令文件,但是只可以识别一个用户SYS,不能将sysdba权限授权给其他用户
--设置为none,表示没有口令文件   远程无法用sys登陆,只能通过操作系统验证方式
--密码文件如果丢失或损坏,系统无法启动
--可以手工创建oracle系统密码
orapwd file=<fname> password=<password> entries=<users>
entries  --sysdba链接最大数
--密码文件没有锁定,只是启动时的引导作用


V$SYSTEM_EVENT  数据库实例整个运行期间所有进程事件的等待时间、次数视图,作为系统优化的依据
等待事件分为三种类型 空闲等待、例行等待、资源等待
注意很多时候进程是空闲等待处理的,所以在该视图主要查看资源等待时间,
如果是进程在例行操作中等待,可以查看该事件的平均等待时间

 

--v$session_wait
--常见的空闲等待事件:client message、null event、pipe get、pmon/smon timer、rdbms rpc message及sql*net等;
--常见的非等闲事件:
buffer busy waits、
db file scattered read、
db file sequential read、
enqueue、
free buffer waits、
latch free、
log file sync、
log file paralle write

 

导入导出建议一定要同版本的导入导出工具
常见错误 exp-00003


估算导出dmp文件大小
select sum(bytes) from user_segments where segment_type='TABLE';

这个计算结果不包含LOB, 和VARRAY, 亦不含分区表数据


--设置归档模式
startup mount;
alter database archivelog;
alter database open;
alter system set  log_archive_start=true scope=spfile;
shutdown immediate
startup;

 

 

数据库已经误删除数据文件,如何启动

startup mount
alter database datafile 'filepos'  offline drop;(noarchivelog)
alter database datafile 'filepos'  offline;(archivelog)
alter database open;
drop tablespace 'spacename'   including contents;

 

log_miner的使用

 

 

 


--查看联机日志信息
select a.group#,b.member, sequence#,first_change# from v$log a ,v$logfile b
where a.group#=b.group#;

 

v$rollstat三个字段说明
rssize 回滚段大小
optsize  optimal大小
hwmsize   你的回滚段曾经最高大小

--统计当前回滚段大小、最高峰大小
select sum(rssize)/1024/1024||'M',sum(hwmsize/1024/1024)||'M'
from v$rollstat;

 

--查看事务占用的回滚段大小(事务尚未提交)

select b.used_ublk,b.xidusn,a.sid from v$session a,v$transaction b
where a.taddr=b.addr;

 

--查看操作系统硬件信息
prtdiag -v


--临时表空间为空
错误号ORA-25153:
alter tablespace 表空间名  add tempfile '文件名' size 文件大小;
创建临时表空间
create temporary tablespace 新表空间名 tempfile '文件名' size 文件大小;
alter  database default temporary tablespace 新表空间名;
drop tablespace 旧空间名 including contents;




rman数据文件损坏恢复脚本
--数据文件损坏
run{
allocate channel c1 type disk;
restore datafile 数据文件号;
recover datafile 数据文件号;
release channel c1;
}


一次控制文件损坏,恢复过程
故意修改控制文件,出现ora-00205错误
在rman下恢复控制文件
restore controlfile from file='最近的一次控制文件备份'
在alter database open resetlogs 出现
ORA 1152 file <name> was not restored from a sufficiently old backup  错误
不行
然后在rman下从自动文件恢复
restore controlfile from autobackup;
启动仍然出现该错误,
通过rman恢复database也不行,
最后没办法,采用
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
然后根据trc文件中的指导
采用第二种方式也不行,只能采用第一种建立
在数据库nomount状态下
执行trc相关 脚本
alter database open;
数据库启动正常

你可能感兴趣的:(oracle常用脚本)