1. 实时查询最耗CPU资源的SQL语句
1. 先通过top命令查看产用资源较多的spid号
2.查询当前耗时的会话ID,用户名,sqlID等:
select sid,serial#,machine,username,program,sql_hash_value,sql_id,
to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') as login_time from v$session
where paddr in (select addr from v$process where spid in ('5648612','256523'));
3. 如果上一步sql_id或者 hash_value不为空,则可用v$sqlarea查出当前正在使用的sql
select sql_text
from v$sqltext_with_newlines
where hash_value = &hash_value
order by piece;
select * from v$sql where sql_id=''
2. dblink
create database link ORC
connect to SUNCPS identified by "123456"
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.1.36)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)';
3. 正则表达式
1) REGEXP_LIKE :与LIKE的功能相似
2) REGEXP_INSTR :与INSTR的功能相似 : 返回字符的个数
3) REGEXP_SUBSTR :与SUBSTR的功能相似 : 截取字符串
4) REGEXP_REPLACE :与REPLACE的功能相似
在新的函数中使用正则表达式来代替通配符‘%’和‘_’。
'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 'n' 或 'r'。
'.' 匹配除换行符 n之外的任何单字符。
'?' 匹配前面的子表达式零次或一次。
'+' 匹配前面的子表达式一次或多次。
'*' 匹配前面的子表达式零次或多次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。
num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。
各种操作符的运算优先级
1. 转义符
2. (), (?:), (?=), [] 圆括号和方括号
3. *, +, ?, {n}, {n,}, {n,m} 限定符
4. ^, $, anymetacharacter 位置和顺序
5. | “或”操作
示例
一、REGEXP_LIKE
/* Formatted on 2009/11/11 19:03 (Formatter Plus v4.8.8) */
SELECT *
FROM scott.emp
WHERE REGEXP_LIKE (ename, '^a{1,3}');
SELECT *
FROM scott.emp
WHERE REGEXP_LIKE (ename, 'a{1,2}');
SELECT *
FROM scott.emp
WHERE REGEXP_LIKE (ename, '^a.*e$');
SELECT *
FROM scott.emp
WHERE REGEXP_LIKE (ename, '^[[:lower:]]|[[:digit:]]');
SELECT *
FROM scott.emp
WHERE REGEXP_LIKE (ename, '^[[:lower:]]');
SELECT sal
FROM scott.emp
WHERE REGEXP_LIKE (sal, '[^[:digit:]]');
SELECT sal
FROM scott.emp
WHERE REGEXP_LIKE (sal, '^[^[:digit:]]');
二、REGEXP_INSTR
/* Formatted on 2009/11/11 19:03 (Formatter Plus v4.8.8) */
SELECT REGEXP_INSTR (ename, '[[:digit:]]$')
FROM scott.emp;
SELECT REGEXP_INSTR (mc, '[[:digit:]]+$')
FROM scott.emp;
SELECT REGEXP_INSTR ('The price is $400.', '$[[:digit:]]+')
FROM DUAL;
SELECT REGEXP_INSTR ('onetwothree', '[^[[:lower:]]]')
FROM DUAL;
SELECT REGEXP_INSTR (',,,,,', '[^,]*')
FROM DUAL;
SELECT REGEXP_INSTR (',,,,,', '[^,]')
FROM DUAL;
三、REGEXP_SUBSTR
/* Formatted on 2009/11/11 19:04 (Formatter Plus v4.8.8) */
SELECT REGEXP_SUBSTR (ename, '[a-z]+')
FROM scott.emp;
SELECT REGEXP_SUBSTR (sal, '[0-9]+')
FROM scott.emp;
SELECT REGEXP_SUBSTR ('aababcde', '^a.*b')
FROM DUAL;
四、REGEXP_REPLACE
/* Formatted on 2009/11/11 19:06 (Formatter Plus v4.8.8) */
SELECT REGEXP_REPLACE ('Joe Smith', '(){2,}', ',') AS rx_replace
FROM DUAL;
SELECT REGEXP_REPLACE ('aa bb cc', '(.*) (.*) (.*)', '3, 2, 1')
FROM DUAL;
4. Unix基本命令
ps--显示进程
grep--搜索文件中的某种文本模式
mailx--读取或者发送mail
cat--连接文件或者显示它们
cut--选择显示的列
awk--模式匹配语言
df--显示剩余的磁盘空间
示例
1. 显示服务器上的可用实例:
$ ps -ef| grep smon
2. 显示服务器上的可用监听器:
$ ps -ef grep listener grep -v grep
(grep命令应该加上-i参数,即grep -i listener,该参数的作用是忽略大小写,因为有些时候listener是大写的,这时就会看不到结果)
$ ps -ef|grep -i listener
3. 查看Oracle存档目录的文件系统使用情况
$ df -k | grep /data
4. 统计alter.log文件中的行数:
$ cat alert_PPRD10.log | wc -l
$ more alert_PPRD10.log | wc -l
5. 列出alert.log文件中的全部Oracle错误信息:
$ grep ORA-* alert.log
6. CRONTAB基本
一个crontab文件中包含有六个字段:
分钟 0-59
小时 0-23
月中的第几天 1-31
月份 1 - 12
星期几 0 - 6, with 0 = Sunday
7. Unix命令或者Shell脚本
要编辑一个crontab文件,输入: Crontab -e
要查看一个crontab文件,输入: Crontab -l
0 4 * * 5 /dba/admin/analyze_table.ksh
30 3 * * 3,6 /dba/admin/hotbackup.ksh /dev/null 2>&1
在上面的例子中,第一行显示了一个分析表的脚本在每个星期5的4:00am运行。第二行显示了一个执行热备份的脚本在每个周三和周六的3:00a.m.运行。
本文介绍了如何使用SQL查询高负载的SQL语句及进程信息,包括利用正则表达式进行高级查询,创建数据库链接,以及常用的Unix命令如ps、grep等,帮助DBA和开发者高效管理和监控Oracle数据库。
8273

被折叠的 条评论
为什么被折叠?



