1.通过EXP或者IMP导出导入数据
导出数据:
exp btfb/ustcinfo@orcl_133.64.36.252 file=C:\Users\asus\Desktop\cust_res_cloud.dmp tables=cust_res_cloud
导入数据:
imp custres/custres2016@orcl ignore=y full=y file=C:\Users\asus\Desktop\cust_res_ip_system.dmp log=C:\Users\asus\Desktop\1.txt
2.大批量导入数据:
sqlldr userid=CustRes/CustRes2016@orcl control=d:\test_cloud.ctl log=d:\demo.log
3.oracle 创建用户并授予dba权限
1.grant connect,resource,dba to zabbix;
4.Oracle如何终止存储过程
1.查询正在执行的存储过程:
select * from v$db_object_cache where locks > 0 and pins > 0 and type='PROCEDURE';
2.在V$ACCESS视图中找到要停止进程的SID:
举例:存储过程名:CRH_ENTRY
SELECT t.* FROM V$ACCESS t WHERE t.object='CRH_ENTRY';
3.在V$SESSION视图中查找到查出SID和SERIAL#
SELECT SID,SERIAL# FROM V$SESSION WHERE SID='1314';
4.杀掉查找出来的进程
alter system kill session 'SID,SERIAL#'
alter system kill session '1314,63759';
5.查询后台运行程序的sid,serial,然后kill该程序
select object_name as 对象名称,s.sid,s.serial#,p.spid as 系统进程号 from v$locked_object l,dba_objects o ,v$session s,v$process p
where l.object_id=o.object_id and l.session_id=s.sid and s.paddr=p.addr;
alter system kill session '996,1427';
6.Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容。
(1)锁表查询的代码有以下的形式:
select count(*) from v$locked_object;
select * from v$locked_object;
(2)查看哪个表被锁
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
(3)查看是哪个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;
(4)杀掉对应进程
执行命令:alter system kill session'1025,41';
其中1025为sid,41为serial#.
7.Oracle查看用户表空间大小
(1).查看具体用户用的是那个表空间
select username,default_tablespace from dba_users; -- 查看所用用户所使用的表空间大小
select username,default_tablespace from dba_users where username='ZABBIX'; -- 查看指定用户所使用的表空间大小
(2).查看所有的表空间大小
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size
FROM dba_tablespaces t, dba_data_files d
WHERE t.tablespace_name = d.tablespace_name --and t.TABLESPACE_NAME = 'TBS_ZABBIX'作为查询指定的用户
GROUP BY t.tablespace_name;
(3).查看表空间物理文件的名称及大小
SELECT tablespace_name,file_id,file_name,round(bytes / (1024 * 1024 * 1024), 2) total_space FROM dba_data_files ORDER BY tablespace_name;
(4).查看用户所使用的表空剩余大小
select a.tablespace_name,
a.tablespace_size * b.block_size / 1024 / 1024 / 1024 "totalmsize(m)",
a.used_space * b.block_size / 1024 / 1024 / 1024 "usedmsize(m)",
round(a.used_percent, 2) "usedrate(%)"
from dba_tablespace_usage_metrics a, dba_tablespaces b
where a.tablespace_name = b.tablespace_name;
(5).这样就可以查看oracle数据库的表空间数据文件位置了。
select t1.name,t2.name from v$tablespace t1,v$datafile t2 where t1.ts# = t2.ts#;
(6).查看指定文件或者指定目录的地址
文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。可以使用某种文件名模式来匹配文件,
记住要用引号将文件名模式引起来。 不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.log的文件,使用~作为 'pathname'参数,波浪号~代表了你的$HOME目录。
find ~ -name "*.log" -print
想要在当前目录及子目录中查找所有的‘ *.log‘文件,可以用:
find . -name "*.log" -print
想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:
find . -name "[A-Z]*" -print
想要在/etc目录中查找文件名以host开头的文件,可以用:
find /etc -name "host*" -print
想要查找$HOME目录中的文件,可以用:
find ~ -name "*" -print 或find . -print
要想让系统高负荷运行,就从根目录开始查找所有的文件。
find / -name "*" -print
如果想在当前目录查找文件名以一个个小写字母开头,最后是4到9加上.log结束的文件:
命令:
find . -name "[a-z]*[4-9].log" -print
8.性能监控
(1). 检测数据库中的事件和等待
SELECT event, total_waits, total_timeouts,time_waited, average_wait FROM v$system_event
(2). 查询会话中的事件和等待时间
select sid, event, total_waits,average_wait from v$session_event where sid=10;
(3). 查询等待进程
SELECT sid, seq#, event, wait_time, state FROM v$session_wait;
(4). 监控全局区的性能
select * from v$sgastat;
(5). 查询命中率
select gethitratio from v$librarycache where namespace = 'SQL AREA';
(6). 当前 sql 语句
select sql_text, users_executing,executions, loads from v$sqlarea;
(7). 查询高速缓存中的命中率
select sum(pins) "Executions", sum(reloads) "Cache Misses",sum(reloads)/sum(pins) from v$librarycache;
(8). 查询全局字典中的有效装载次数
select namespace,pins,reloads,invalidations from v$librarycache;
(9). 采集Buffer Gets前十的不良sql
select * from (select substr(sql_text, 1, 40) sql,buffer_gets,executions,buffer_gets / executions "Gets/Exec",hash_value,address
from v$sqlarea where buffer_gets > 0 and executions > 0 order by buffer_gets desc) where rownum <= 10;
(10).采集物理读前十的不良sql语句
select * from (select substr(sql_text, 1, 40) sql,disk_reads,executions,disk_reads/executions "Reads/Exec",hash_value,address
from v$sqlarea where disk_reads > 0 and executions > 0 order by disk_reads desc) where rownum <= 10;
(11).采集执行次数前十的不良SQL语句
select * from (select substr(sql_text, 1, 40) sql,rows_processed,executions,rows_processed/executions "Rows/Exec",hash_value,address
from v$sqlarea where executions > 0 order by executions desc) where rownum <= 10;
(12).采集PARSE与EXECUTIONS的比值的前十的不良SQL语句
select * from (select substr(sql_text, 1, 40) sql,parse_calls,executions,hash_value,address
from v$sqlarea where parse_calls > 0 order by parse_calls desc) where rownum <= 10;
(13).采集占用shared memory前十的不良SQL语句
select * from (select substr(sql_text, 1, 40) sql,sharable_mem,executions,hash_value,address
from v$sqlarea where sharable_mem > 1048576 order by sharable_mem desc) where rownum <= 10;
(14).采集运行时间top10的不良sql
select * from (select t.SQL_FULLTEXT,(t.LAST_LOAD_TIME - to_date(t.FIRST_LOAD_TIME,'yyyy-mm-dd hh24:mi:ss'))*24*60,
t.DISK_READS,t.BUFFER_GETS,t.ROWS_PROCESSED,t.LAST_ACTIVE_TIME,t.LAST_LOAD_TIME,t.FIRST_LOAD_TIME
from v$sqlarea t order by t.FIRST_LOAD_TIME desc) where rownum <= 10;
9.相关表,空间的查询语句
(1).查看数据库表的索引占用空间
select segment_name ,sum(bytes)/1024/1024 from user_segments where segment_type ='INDEX' group by segment_name;
(2)查看数据库表的表占用的空间大小
select segment_name, sum(bytes)/1024/1024 Mbytese from user_segments where segment_type='TABLE' group by segment_name;
(3)查看数据库表的分区表占用空间
select segment_name,sum(bytes)/1024/1024 Mbytes from user_segments where segment_type='TABLE PARTITION' group by segment_name;
(4)查看zabbix数据库占用的后台空间大小
SELECT tablespace_name,file_id,file_name,round(bytes / (1024 * 1024), 0) total_space FROM dba_data_files where tablespace_name = 'TBS_ZABBIX' ORDER BY tablespace_name;
(5)查看用户表的索引和表空间大小联合
Select Segment_Name "段名",Segment_Type "段类型",TableSpace_Name "表空间",Sum(bytes)/1024/1024/1024 "空间占用(G)" From User_Extents
Group By Segment_Type,Segment_Name,TableSpace_Name order by Sum(bytes)/1024/1024 desc
10.Oracle的相关工具语句
(1).Oracle回收站操作(通常$字符为开头的字符串表示是垃圾数据,要及时回收,表空间数据才能释放)
select * from user_recyclebin;
purge user_recyclebin;
show recyclebin;
purge recyclebin;
(2).查看数据的版本
select * from v$version;
15.oracle中常用的正则表达式
(1).截取表中字段中的字母(即去除中文,只留英文)
select regexp_substr(t.mainframe_type,'[A-Z|a-z]+',1) from ci_host t where t.operate_system is null;
截取指定字符串前后的信息
select name,substr(name,1,instr(name,'-')-1) 前,substr(name,instr(name,'-')+1,length(name)-instr(name,'-')) 后 from test;
select p.res_name,p.id,p.zb_name,SUBSTR(p.zb_name,instr(p.zb_name,'.',1,3)+1,4) from idc_res_relation p , ci_host t where t.id = p.id
and t.name = p.res_name and p.table_code = 'CI_HOST' and p.zb_id is not null and instr(p.res_name,SUBSTR(p.zb_name,instr(p.zb_name,'.',1,3)+1,4))=0;
16.AWR报告的性能报告
Oracle中的AWR,全称为Automatic Workload Repository,自动负载信息库。它收集关于特定数据库的操作统计信息和其他统计信息,Oracle以
固定的时间间隔(默认为1个小时)为其所有重要的统计信息和负载信息执行一次快照,并将快照存放入AWR中。这些信息在AWR中保留指定的时间
(默认为1周),然后执行删除。执行快照的频率和保持时间都是可以自定义的。
导出步骤:
1.登陆oracle用户,sudo sqlplus / as sysdba; (可能sudo权限不能用,要在root权限下visudo添加上授权的用户)
2.conn / as sysdba; 进行连接
3.@?/rdbms/admin/awrrpt.sql 进入oracle报告选项中
4.Enter value for report_type: 这个显示的意思是打印一个报告是以什么格式打印的,要么输入html,要么输
入text,如果直接默认回车,这里是html
5.Enter value for num_days: 这里的提示是让我们输出几天的报告
6.Enter value for begin_snap: 出入起始的快照ID,这里指的是打印出来的snap id,后面有snap started开始的时间
7.Enter value for report_name: 输入一个报告的名字
AWR报告中各个标识的含义:
(1)Sessions
表示采集实例连接的会话数。这个数可以帮助我们了解数据库的并发用户数大概的情况。这个数值对于我们判断数据库的类型有帮助。
(2)Cursors/session
每个会话平均打开的游标数。
(3)Elapsed
通过Elapsed/DB Time比较,反映出数据库的繁忙程度。如果DB Time>>Elapsed,则说明数据库很忙。
(4)DB Time
表示用户操作花费的时间,包括CPU时间和等待事件。通常同时这个数值判读数据库的负载情况。
具体含义
db time = cpu time + wait time(不包含空闲等待)(非后台进程)
*db time就是记录的服务器花在数据库运算(非后台进程)和等待(非空闲等待)上的时间。对应于V$SESSION的elapsed_time字段累积。
AWR报考中各个性能分析:
1. SQL ordered by Elapsed Time
记录了执行总和时间的TOP SQL(请注意是监控范围内该SQL的执行时间总和,而不是单次SQL执行时间 Elapsed Time = CPU Time + Wait Time)。
Elapsed Time(S): SQL语句执行用总时长,此排序就是按照这个字段进行的。注意该时间不是单个SQL跑的时间,而是监控范围内SQL执行次数的总和时间。单位时间为秒。Elapsed Time = CPU Time + Wait Time
CPU Time(s): 为SQL语句执行时CPU占用时间总时长,此时间会小于等于Elapsed Time时间。单位时间为秒。
Executions: SQL语句在监控范围内的执行次数总计。
Elap per Exec(s): 执行一次SQL的平均时间。单位时间为秒。
% Total DB Time: 为SQL的Elapsed Time时间占数据库总时间的百分比。
SQL ID: SQL语句的ID编号,点击之后就能导航到下边的SQL详细列表中,点击IE的返回可以回到当前SQL ID的地方。
SQL Module: 显示该SQL是用什么方式连接到数据库执行的,如果是用SQL*Plus或者PL/SQL链接上来的那基本上都是有人在调试程序。一般用前台应用链接过来执行的sql该位置为空。
SQL Text: 简单的sql提示,详细的需要点击SQL ID。
2.SQL ordered by CPU Time
记录了执行占CPU时间总和时间最长的TOP SQL(请注意是监控范围内该SQL的执行占CPU时间总和,而不是单次SQL执行时间)。
3.SQL ordered by Gets
记录了执行占总buffer gets(逻辑IO)的TOP SQL(请注意是监控范围内该SQL的执行占Gets总和,而不是单次SQL执行所占的Gets)。
4.SQL ordered by Reads:
记录了执行占总磁盘物理读(物理IO)的TOP SQL(请注意是监控范围内该SQL的执行占磁盘物理读总和,而不是单次SQL执行所占的磁盘物理读)。
5.SQL ordered by Executions:
记录了按照SQL的执行次数排序的TOP SQL。该排序可以看出监控范围内的SQL执行次数。
17.Oracle的sql执行计划查看
查看执行计划的方式有三种:
EXPLAIN PLAN 、V$SQL_PLAN 、SQL*PLUS AUTOTRACE
1.EXPLAIN PLAN:
显示执行相应语句时可以使用的理论计划
读取执行计划:按缩进量读取,缩进越多,越先执行;缩进量相同,先上后下。
dbms_xplan 程序包里三种表函数
display(理论并未真正执行)
display_awr(真正执行)
display_cursor(查询内存中执行过的执行计划)
语法:
EXPLAIN PLAN SET STATEMENT_ID = ' ' FOR
要查看的SQL语句 -- 先进行解释
输出:
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY()); -- 在查看解释的结果
display函数中的参数:
table_name:指定计划表的名字,缺省值为‘PLAN_TABLE’。
statement_id:SQL语句的ID号,是在生成执行计划时使用set statement_id,命令设置的值,默认值为NULL,当使用默认值时,将显示最近插入计划表中的执行计划。
format:用于控制display函数输出内容,其常用值有:
basic: 仅仅显示最少的信息。基本上包括操作和操作的对象
typical:显示大部分信息。基本上包括除了别名,提纲和字段投 影外的所有信息,此为缺省值。
serial: 类似于typical,但不显示并行操作
all: 显示除提纲之外的所有信息
advanced:显示所有信息
相匹配的额外修饰符有:(需要某个修饰符使用“+”,不需要使用“-”,连接之间要有空格)
alias:控制包含查询块与别名的显示部分
bytes:控制执行计划表中字段bytes的显示,执行该步骤后返回的字节数
cost:控制执行计划表中字段cost的显示,Oracle估计的该步骤的执行成本,用于说明SQL执行的代价,理论上越小越好(该值可能与实际有出入)
note:控制包含注释信息的显示部分
outline:控制包含提纲信息的显示部分
parallel:控制包含并行处理信息的提示
paration:控制并行处理信息的显示,尤其是执行计划表中字段TQ、IN-OUT、PQ Distrib的显示
predicate:控制包含谓词filter和access显示部分
peeked_binds:控制包含绑定变量窥探部分的显示。仅当生成执行计划时使用了绑定变量是可见
projection:控制包含投影信息的显示部分
remote:控制远程执行的SQL语句的显示
rows: 控制执行计划表中字段rows的显示,Oracle估计的当前操作的返回结果集行数
例如:
EXPLAIN PLAN
SET STATEMENT_ID = '192' FOR
SELECT * FROM SCOTT.EMP;
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY());
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 1218 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| EMP | 14 | 1218 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement (level=2)
2.v$sql_plan视图,即过DBMS_XPLAN.display_cursor方式查看:
视图中包含一种方法,可以查询最近使用过的真正执行过的执行过的执行计划(VSQLPLANSTATISTICS提供了实际的执行统计信息,通
过VSQL_PLAN_STATISTICS_ALL,可并列比较优化程序评估结果)
语法:
SELECT PLAN_TABLE_OUTPUT FROM
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('cfzo0...'));
v$sql_plan查询结果中各列说明(部分):
HASH_BALUE:库高速缓存中父语句的散列值
ADDRESS:此游标的父游标的句柄地址
CHILD_NUMBER:使用此执行计划的子游标编号
POSITION:具有相同的PARENT_ID的操作的处理顺序
PARENT_ID:操作当前步骤的输出的下一执行步骤的ID
ID:执行计划中每个步骤所分配的编号
案例:
1.---在sys用户下执行了SQL语句:
SELECT * FROM SCOTT.EMP;
2.---通过SQL文本,在v$sql视图中查询SQL_ID:
SELECT sql_text,sql_id from v$sql where sql_text like'%SCOTT.EMP%';
3.---得到SQL_ID:
SELECT * FROM SCOTT.EMP 4ay6mhcbhvbf2
4.---查看执行计划:
SELECT PLAN_TABLE_OUTPUT FROM
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('4ay6mhcbhvbf2'));
SELECT * FROM SCOTT.EMP
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3 (100)| |
| 1 | TABLE ACCESS FULL| EMP | 14 | 1218 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement (level=2)