小整理汇总

数据库 PSU,SPU(CPU),Bundle Patches 和 Patchsets 补丁号码快速参考 (文档 ID 1922396.1)

查看数据库中的表空间使用情况:
select a.TABLESPACE_NAME,
    a.curr_mb,
    b.free_mb,
    a.max_mb,
     round((b.free_mb/a.curr_mb)*100,3)||'%' "free_pct"
  from
  (select tablespace_name,sum(bytes/1048576) curr_MB,sum(MAXBYTES/1048576) MAX_MB from dba_data_files group by TABLESPACE_NAME) a,
  (select TABLESPACE_NAME,sum(bytes/1048576) free_mb from dba_free_space group by TABLESPACE_NAME) b
where a.TABLESPACE_NAME = b.TABLESPACE_NAME; 
oracle怎么样只导出表结构而不导出表数据
导出exp命令时加rows=n参数类似exp system/system@orcl file=c:/tmp.dmp log=c:/log.log owner=user1 rows=n

修改 spfile参数是否重启的查询:
spfile中的参数,有的可以在session级改,不用重启,有的需重启才能生效。
具体看v$parameter 视图中的isses_modifiable和issys_modifiable列。

1:查看是否有死锁存在,查出有数据则代表有死锁
select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a,v$locked_object b,all_objects c
where p.addr=a.paddr
and a.process=b.process
and c.object_id=b.object_id

2:查出死锁session的精确信息【sid 为前面语句的session_id】
SELECT sid, serial#, username, osuser FROM v$session where sid='第一步查询出来的session_id';

3:删除死锁【第一个参数为sid,第二个为serial#】
alter system kill session '第一个参数,第二个参数';

oracle中杀死会话命令:
select * from v$session中查到会话的sid和sericl# 利用alter system kill session 'sid,serial#' 即可杀掉
查服务器端的IP地址
select sys_contest('userenv','ip_address') from dual
select host_name from v$instance

ORCLE 表中列的修改
增加一列:
alter table emp4 add test varchar2(10);
修改一列:
alter table emp4 modify test varchar2(20);
删除一列:
alter table emp4 drop column test;
  这里要注意几个地方,首先,增加和修改列是不需要加关键字COLUMN,否则会报错ora-00905。
  其次,对删除单列的话,一定要加COLUMN,然后记住,删除是不需要加列类型的。
做法如下;
增加多列:
alter table emp4 add (test varchar2(10),test2 number);
修改多列:
alter table emp4 modify (test varchar2(20),test2 varchar2(20));
删除多列:
alter table emp4 drop (test,test2);
很奇怪的现象,再单列中要加关键字COLUMN,然而再删除多列的时候,不能加COLUMN关键字。 

copy  物理备   源文件和备份后的文件是一样大的

backup 逻辑物理备   基于块级别的备份    已经使用过的块   热点备

backup datbase;   全库备份
backup datafile 1,2,35,6;  备份数据文件
backup tablespace  XXX    备份表空间
backup spfile;   备份参数文件
backup current controlfile;  备份控制文件
backup archivelog   all ;      备份归档日志
backup  full database plus archivelog;  备份全库文件包括归档日志
backup archivelog all delete input;备份归档日志并删除归档目录下的归档日志
backup database skip readonly;    备份全库跳过只读
backup database skip offline;    备份全库跳过脱机
backup database format '/u02/dbfull_%u';    备份时指定储存位置及存储格式


copy current controlfile to '存储位置'  等同于 alter database backup controlfile to '存储位置'

backup as copy database;    备份文件比较大,很少用
  
开启oracle操作系统认证方法:
(1)在计算机的本地用户和组里的ora_dba组里加入当前登录计算机的用户名 
(2)F:\oracle\product\10.2.0\db_1\network\sqlnet.ora里面的
SQLNET.AUTHENTICATION_SERVICES= (NTS)这一行内容不被注释

oracle11g导出为10g的数据备份
1. select * from dba_directories;// 默认的 DATA_PUMP_DIR 在 d:\oracle\product\10.2.0\admin\orcl\dpdump
2. create directory ams_dir as 'd:/ams_dbbak';//在linux下要让这个目录可被读写。
1. expdp userid='sys/manager1@orcl as sysdba' schemas=ams directory=DATA_PUMP_DIR dumpfile=ams10g.dmp logfile=ams.log version=10.2.0.1.0
2. expdp userid='sys/manager1@orcl as sysdba' schemas=cgy directory=DATA_PUMP_DIR dumpfile=cgy10g.dmp logfile=cgy.log version=10.2.0.1.0
1. impdp userid='sys/manager1@orcl as sysdba' schemas=ams directory=DATA_PUMP_DIR dumpfile=ams10g.dmp logfile=ams.log version=10.2.0.1.0

关于orapwd命令中entries参数的解释:
orapwd命令是用来创建oracle的口令文件,其中这个命令包含3个参数,
C:\Users\ahui>orapwd
Usage: orapwd file= password= entries= force= nosys
file参数表示创建的口令文件的名称,
password参数表示你创建的sys用户的密码
entries参数
entries是可以保存的记录个数,每个具有sysdba或sysoper权限的用户算一个记录,如果一个用户同时具有sysdba和sysoper的权限,则只占一个记录。数据库启动后可以通过v$pwfile_users来查看密码文件中记录的情况。
但是entries并不是一个准确的值,也就是说,如果我们设置entries为10,可能会有超过10个用户可以具有sysdba或者sysoper的权限。
entries参数分别为0-4,5-8,9-12,13-16,17-20,每组内各个文件内容想同。
也就是说如果创建口令文件时你的entries参数指定为某一个区间的值的话,那么拥有sysdba或sysoper权限的用户最多可以为这个区间的最大值,
例如:但你创建口令文件时指定的entries参数为2时,其实正真永远sysdba或sysoper权限的用户个数最大为4,而非你指定的2.

启动|停止|查看oracle监听       lsnrctl [start|stop|status] 
启动|停止|oracle服务             net [start|stop] oracleserviceorcl
数据库有两种运行模式: 一种是归档模式即 archivelog 另一种就是不归档模式即noarchivelog
(其中ARCHIVELOG模式支持联机备份)
前提条件:
确定数据库运行模式: select log_mode from v$database;   查看当前数据库是处于归档还是非归档模式.
archivelog>>noarchivelog
转换步骤:
1、设置两个参数 LOG_ARCHIVE_DEST_n , LOG_ARCHIVE_START
示例:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_n='LOCATION=D:/oracle/product/10.1.0/haha mandatory ';
ALTER SYSTEM SET LOG_ARCHIVE_START=TRUE SCOPE=SPFILE;(10G已经失去意义了)
或是(有快闪恢复区时 db_recovery_file_dest,db_recovery_file_dest_size )
2.shutdown immdiate
3.startup mount
4.alter database archivelog
5.alter database open
2、SHUTDOWN IMMEDIATE (必须要干净关闭)
3、STARTUP MOUNT
4、ALTER DATABASE ARCHIVELOG;
5、ALTER DATABASE OPEN;
NOARCHIVE-----------》ARCHIVE
noarchivelog>>archivelog
1.shutdown immediate   (不需要干净关闭)
2.startup mount
3.alter database noarchivelog;
4.alter database open

查看SGA的组成部分:
select component,granule_size from v$sga_dynamic_components;
db_cache_size
log_buffer
shared_pool_size
large_pool_size
java_pool_size

非交互式安装oracle:
./runInstaller -responsefile myrespfile -silent

oracle数据去重
方法一:
delete
from pornpages t1
where t1.rowid>(select min(t2.rowid) from pornpages t2 where t1.recordid=t2.recordid)
方法二:
delete
from pornpages
where rowid not in(select min(rowid) from pornpages group by recordid)
推荐方法一

alter session set nls_date_format='yyyy/mm/dd hh24/mi/ss'

在非归档模式下,表空间可以offline,但是数据文件不能offline
在归档模式下,offline表空间后,在v$datafile_header中显示的checkpoint_change#为0,而offline数据文件则可显示offline时的checkpoint_change#
recover datafile n/tablespace n/ database until cancel   为不完全恢复,即之后打开数据库时必须resetlogs,同时recover时不默认使用relog,
而recover datafile n/tablespace n/ database则为完全恢复,在recover时会使用到relog
system,undo表空间不能offline
部分联机备份
alter  tablespace system begin backup;
os copy
alter tablspace system end backup;
alter database end  backup;
select * from v$backup;查看部分联机备份状态

flashback table_name to before drop rename to table_name;

Oracle捕获问题SQL解决CPU过渡消耗
  1.登陆数据库主机
  使用vmstat检查,发现CPU资源已经耗尽,大量任务位于运行队列:
  2.使用Top命令
  观察进程CPU耗用,发现没有明显过高CPU使用的进程
  3.检查进程数量
  发现系统存在大量Oracle进程,大约在300左右,大量进程消耗了几乎所有CPU资源,而正常情况下Oracle连接数应该在100左右. 

oracle 创建dblink创建语句

 create database link XXX_LINK
  connect to name identified by pwd    using '
      (DESCRIPTION = 
          (ADDRESS_LIST = 
              (ADDRESS = 
                 (PROTOCOL = TCP)
                 (HOST = XXX.XXX.XXX)
                 (PORT = 1521)) ) 
              (CONNECT_DATA = 
                  (SERVICE_NAME = XXXX)
         ) )';


完整的备份命令如下:
Run{
                Configure controlfile autobackup on;
                Configure controlfile autobackup format for device type disk to '/orabackup/backup1/ctl_%F';
                Allocate channel c1 device type disk format '/orabackup/backup1/bak_%U';
                Backup database skip inaccessible 
                Plus archivelog filesperset 20
               Delete all input;
               Release channel c1;
}
Crosscheck backupset;
Delete noprompt obsolete;     

如何停止删除oracle中正在执行的job?

--查看所有job;
select * from dba_jobs;
--查看正在运行的job;
select * from dba_jobs_running;
--根据sid查出对应的session;
select SID,SERIAL# from V$Session where SID='&SID';
--kill对应的session;
alter system kill session '&SID,&SERIAL';
--将job置为broken;
exec dbms_job.broken('&JOB',true);
--sysdba用户权限删除job;
delete from dba_jobs where JOB='&JOB';


OLTP :SGA=系统内存*56% PGA=SGA*(10%-20%)
OLAP :SGA=系统内存*48% PGA=SGA*(45%-65%)

转储控制文件:
alter session set events 'immediate trace name CONTROL level 10';
查看当前的SCN:
select dbms_flashback.get_system_change_number from dual;


oracle在各个系统上的环境变量的设置区别:
linux   LD_LIBRARY_PATH=
AIX     LIBPATH=
HP-UX   SHLIB_PATH=

各个操作系统上的系统日志的目录:
Solaris :/var/adm/messages
HP-UX: /var/adm/syslog/syslog.log
Tru64: /var/adm/messages
Linux: /var/log/messages
AIX  : /bin/errpt -a

oracle的监听日志太大,正确的删除步骤

1.进入$ORACLE_HOME/network/log,查看日志大小 du -a
2. 把 listen log 关闭.
lsnrctl set log_status off;
3.把日志改名,mv listener.log listener.log_bak
4.启动listen log
lsnrctl set log_status on;此时检查log目录下,会自动生成一个新的log文件,rm掉之前的监听文件即可

数据库局部性hang   可以查询视图v$session_wait 的p1,p2,p3值,如果该值在不停地变化,则说明会话没有hang,可能是比较慢

进一步,可以设置10046事件和errorstack来诊断
alter session set tracefile_identifier = 'STACK_10046';
oradebug setspid 9934
oradebug unlimit
oradebug event 10046 trace name context forever,level 12
oradebug dump errorstack 3
oradebug tracefile_name
oradebug event 10046 trace name context off;

打PSU的时候可能会使用到的命令
/usr/sbin/slibclean
genld -l | grep /oracle/app/oracle/product/10.2.0/db_1  #ORACLE_HOME目录
genkld | grep /oracle/app/oracle/product/10.2.0/db_1

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26366371/viewspace-2062060/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26366371/viewspace-2062060/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值