
USERFUAL SCTIPTS
robinson1988
本人精通SQL,精通所有关系型数据库SQL调优,精通所有关系型数据库性能优化,精通所有关系型数据库架构,精通分库分表,熟悉大数据Hadoop,Hive,Spark,Flume,Kafka,Flink,熟悉各种ETL工具,熟悉Python,Java,C
展开
-
MySQL根据主键切割大事务(变相ROWID切片)
不管是Oracle,MySQL,还是PostGre SQL,跑大事务都会严重影响数据库性能在Oracle里面可以利用rowid切片的方式处理大事务,如果不清楚什么是rowid切片,可以买一本《SQL优化核心思想》看看MySQL没有Oracle的区,块,段这些概念,所以也就不能使用rowid切片的方式处理大事务MySQL中表一般都是存在innodb引擎中的,使用innodb引擎每个表都必须要设置主键(当然了你也可以不设置主键,你屌)MySQL中主键一般都是自增(auto_increment)的原创 2020-05-08 22:17:20 · 1454 阅读 · 3 评论 -
Oracle中TX锁(行锁)监控,抓TX锁的源头
DBA小伙子,看到这个文章是不是很开心,解决了你一个大麻烦session 1: update emp_bak set ename='沙雕' where empno=7369;session 2: update emp_bak set ename='大长腿' where empno=7369;session 3: update emp_bak set ename='矮丑穷' where empno=7369;运行下面脚本可以抓到哪个SID,哪个SQL_ID,跑的SQL_TEXT锁住了哪个SID原创 2020-05-18 23:51:09 · 2425 阅读 · 2 评论 -
在Oracle和MySQL中利用SQL查询出今年日历
Oracle写法:select case when rank() over(partition by month order by week) = 1 then month else ' ' end month, max(一) 一, max(二) 二, max(三) 三, max(四) 四, max(五) 五, max(六) 六,原创 2020-05-10 01:32:32 · 1011 阅读 · 0 评论 -
获取MySQL中某个数据库下所有表建表语句的DDL
本脚本可以获取MySQL中某个数据库下所有表建表语句的DDL注意:本脚本需在MySQL8.0以上版本运行注意:本脚本不获取VIEW创建语句注意:本脚本没有处理主键,外键等约束注意:本脚本只处理非分区表,分区表请自己改写脚本注意:如果你做数据迁移,想把MySQL数据库迁移到其他数据库,自己改写脚本WITH tab AS (SELECT table_name FROM informa...原创 2020-05-07 10:51:07 · 5005 阅读 · 0 评论 -
利用Python脚本实现Oracle与MySQL之间数据迁移
虽然可以用kettle等ETL工具来做数据迁移,但是现在Python很流行,Python编码也特简单,所以就写个Python脚本来实现数据迁移import cx_Oracleimport osimport time#说明:本脚本可以将一台Oracle服务器的表迁移到另外一台Oracle服务器#注意:从Oracle迁移到Mysql或者从MySQL迁移到Oracle你们自己改一下conn...原创 2020-05-03 19:23:52 · 2607 阅读 · 0 评论 -
抓出Oralce当前账户下所有表建表语句,迁移到MySQL
有时候需要导出当前Oracle账户下所有的表结构信息,在其他Oracle测试库重建,或者迁移到MySQL数据库中虽然可以用工具,但是本人还是习惯自己动手本脚本会将分区表处理为非分区表,如需添加分区信息,自己改脚本本脚本只支持number,char,varchar2,date,timestamp数据类型如需支持更多数据类型,自己修改脚本如需将Oracle数据类型转换为MySQL数据类型...原创 2020-04-28 23:47:22 · 586 阅读 · 1 评论 -
关于lock的一些脚本
下面的脚本可以查看哪些对象被哪些会话锁定,以及锁定的类型col usernameformat a10col lock_type format a15col object_name format a15select oracle_username username,session_id sid,decode(locked_mode,0,None,1,Null,2,Row share,原创 2009-12-17 13:45:00 · 2802 阅读 · 0 评论 -
关于v$db_object_cache的一些脚本
找出在 library cache中所需空间大于100k的PL/SQL对象select name,sharable_mem,loads from v$db_object_cachewhere sharable_mem>102400 and type in(PACKAGE,PACKAGE BODY,FUNCTION,PROCEDURE)and kept=NO;如果load原创 2009-12-17 23:27:00 · 3227 阅读 · 0 评论 -
找出占用大量资源的SQL
该语句找出磁盘读大于10000的SQLcol username format a10col sid format 9999select b.username,a.disk_reads,a.executions,a.disk_reads/decode(a.executions,0,1,a.executions) rds_ratio,a.sql_text sql from v$sqlarea a,原创 2009-12-18 13:00:00 · 2992 阅读 · 2 评论 -
检测表是否需要shrink,Segment advisor
exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO; select a.owner || . || a.table_name "Table",a.num_rows,a.avg_row_len,b.inserts,b.deletes,a.num_rows+nvl(b.inserts,0)-nvl(b.deletes,0) total_row原创 2010-03-08 11:44:00 · 4718 阅读 · 0 评论 -
查询一个月一来表空间的变化情况
自己写的一个小脚本,该脚本可以查询一个月一来表空间的变化情况,注意,该脚本只能在10g以及以上版本中运行,因为9i没有dba_hist_tbspc_usage这个视图select a.name,b.* from v$tablespace a,(select tablespace_id,trunc(to_date(rtime,mm/dd/yyyy hh24:mi:ss))datetime原创 2009-12-31 00:00:00 · 3853 阅读 · 0 评论 -
ORACLE进制转换函数
oracle中没有16进制转2进制的函数,为了工作方便,自己写了一个create or replace function hex_to_bin(hex varchar2) return varchar2 is v_hex varchar2(10000); v_len number; v_var varchar2(10000); v_result varchar2(10原创 2010-03-21 01:28:00 · 7434 阅读 · 0 评论 -
rebuild 分区索引
今天要做一个任务,rebuild 一个索引, 该索引建立在有11亿条数据的表上。对于非组合分区索引,需要rebuild 每个分区(partition),不能直接rebuild整个索引,对于组合分区索引,需要rebuild每个子分区(subpartition),不能直接rebuild整个索引,也不能直接rebuild 分区(partition)由于我要rebuild的索引很大原创 2010-07-14 21:57:00 · 10756 阅读 · 1 评论 -
选出有行连接(row chain)或者是行迁移(row migeration)的表
自己编写的一个小脚本,该脚本的主要功能是选出有行迁移或者行连接的表,并且按照行迁移/行连接降序输出OWNER.TABLE_NAME,该脚本没有统计ORACLE系统内置的表,如果表的索引状态为unusable,也不能统计,请在数据库空闲的时候运行该脚本。 严重警告:请别在生产环境中乱用该脚本,后果自负set serveroutput onset linesize 200set pagesiz原创 2009-12-12 23:00:00 · 2379 阅读 · 0 评论 -
选出需要rebuild的索引
自己编写的一个脚本,该脚本的主要功能是列出需要rebuild的索引,列出状态为unusable的索引。我没有将ORACLE内置账户的索引考虑在内。需要rebuild的索引遵循如下原则:1.索引高度大于等于42.索引中被删除的数据超过索引数据的20%。3.索引的状态为VALID警告:别胡乱在生产库中运行该脚本,千万别在繁忙的时候运行该脚本,慎重,慎重set serverout原创 2009-12-12 20:25:00 · 3170 阅读 · 0 评论 -
关于log的一些脚本
查询日志切换的频率(最近7天)RAC 和非RAC通用select a.thread#,b.recid,to_char(b.first_time,yyyy-mm-dd hh:mi:ss) start_time,a.recid,to_char(a.first_time,yyyy-mm-dd hh:mi:ss) end_time,round(((a.first_time-b.firs原创 2010-01-14 13:11:00 · 2495 阅读 · 0 评论 -
查询SGA,PGA pool 内存分配情况
如下脚本可以查看SGA,PGA 的使用状况 前面发的脚本有点小bug,现在改了..select name,total,round(total-free,2) used, round(free,2) free,round((total-free)/total*100,2) pctused from (select SGA name,(select sum(value/1024/原创 2010-01-12 16:01:00 · 7208 阅读 · 1 评论 -
根据当前等待事件名查找造成该等待事件的SQL
例如查找关于对library ....等待事件有贡献的SQLselect sql_text from V$sqlarea where (address,hash_value) in (select sql_address,sql_hash_value from v$session where event like library%);此语句只能运行于10g版本以上,因为10g中原创 2009-11-18 16:14:00 · 2594 阅读 · 1 评论 -
根据SID找出当前用户正在执行的SQL
select sql_text from v$sqlarea where (hash_value,address)=(select sql_hash_value,sql_address from v$session where sid=&sid);注意,上面的语句SQL脚本只能查出当前用户正在执行SQL,也就是说v$session.status=ACTIVE如果想找出执行过了的sql,原创 2009-11-18 16:19:00 · 2971 阅读 · 0 评论 -
找出热点块所属的用户,对象名,类型
select owner,object_name,object_type from dba_objects where data_object_id in (select obj from x$bh where hladdr in (select addr from (select addr from v$latch_children where name=cache buffers c原创 2009-11-21 23:20:00 · 1926 阅读 · 0 评论 -
检查日志文件是否传输到备用数据库
例如:我配置归档位置如下: SQL> show parameter log_archive_dest_2NAME TYPE VALUE------------------------------------ -------------------------------原创 2009-11-23 11:19:00 · 2002 阅读 · 0 评论 -
关于I/O的一些脚本
可以使用如下脚本查询某个数据文件单块读的平均时间(摘自OWI)select a.file# "File#",b.file_name "File_Name",a.singleblkrds "Single Block Reads",a.singleblkrdtim "Single Block Read Time",a.singleblkrds/a.singleblkrdtim averag原创 2009-11-26 16:34:00 · 2485 阅读 · 3 评论 -
找到引起磁盘排序的SQL
下面的这些脚本都可以找到引起磁盘排序的SQL。 SELECT /*+ rule */ DISTINCT a.SID, a.process, a.serial#,TO_CHAR (a.logon_time, YYYYMMDD HH24:MI:SS) LOGON, a.osuser,TABLESPACE, b.sql_textFROM v$session a, v$sql b, v$sort_原创 2009-11-26 22:45:00 · 2494 阅读 · 1 评论 -
使用ASH监控历史会话,找出坏SQL
使用如下脚本可以监控历史会话经历过哪些等待事件,并且按照等待次数降序排列select session_id,event,count(*),sum(time_waited) from v$active_session_history where session_state=WAITING and time_waited>0 and sample_time>=(sysdate-&howlon原创 2009-11-30 17:08:00 · 3446 阅读 · 0 评论 -
将索引移动到别的表空间
最开始以为index也可以使用move命令来移动表空间,结果想法错了alter index index_name rebuild tablespace tablespace_name online nologging parallel;SQL> select segment_name,segment_type,tablespace_name from user_segments where原创 2009-12-02 15:54:00 · 4514 阅读 · 4 评论 -
监控index是否被使用
从9i起,ORACLE提供了监控索引是否使用的功能,可以查看v$object_usage来观察索引是否被使用,不过查看这个视图之前需要打开索引的监控功能,使用如下命令可以打开索引监控功能 alter index schema.index_name monitoring usage;使用如下命令关闭索引监控alter index schema.index_name monitoring usag原创 2009-12-03 16:39:00 · 2744 阅读 · 0 评论 -
监控表空间利用,数据文件
自己编写的监控表空间利用率的小脚本,这个脚本没有监控temp表空间这个脚本按照表空间使用率降序排列col tablespace_name format a15col total_space format a10col free_space format a10col used_space format a10col used_rate format 99.99select a.tables原创 2009-12-13 23:10:00 · 2214 阅读 · 0 评论 -
找出需要分析的表以及delete超过阀值(你设定)的表
自己编写的一个小脚本,找出没有被analyzed的表,插入条数top 5,删除条数 top 5的表,以及delete 超过阀值的表,该脚本对ORACLE性能没有多大影响,放心使用吧。注意,每当我们对表搜集一次统计信息之后,如果该表没有insert,delete操作,此脚本将无法查询出任何条目create or replace Function tablespace(segmen原创 2009-12-14 16:02:00 · 2450 阅读 · 0 评论 -
如何查看,更改隐含参数
可以使用如下脚本查看隐含参数SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describFROM SYS.x$ksppi x, SYS.x$ksppcv yWHERE x.inst_id = USERENV (Instance)AND y.inst_id = USERENV (Instance)AND x.indx = y.ind原创 2009-11-10 16:11:00 · 4683 阅读 · 2 评论