数据库 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%)
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
查看数据库中的表空间使用情况:
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;
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/