获取用户User,对象Object的DDL定义

  获取用户、用户权限的DDL语句 [code language="sql"]set feedback off pages 0 long 90000 serveroutput onaccept USERNAME prompt "Enter username :" [/code] 获取对象、相关对象的DDL 特定表的DDL: [code language="sql"]SET LONG 2000000 SET PAGESIZE 0 SELECT DBMS_METADATA.GET_DDL(TABLE,EMP’,’SCOTT’) FROM DUAL; [/code]   获取表相关的授权: [code language="sql"]SET LONG 2000000 SET PAGESIZE 0 SELECT DBMS_METADATA.GET_DEPENDENT_DDL(‘OBJECT_GRANT’,’EMP’,’SCOTT’) FROM DUAL; [/code]   获取指定schema(这里用scott举例)的所有表DDL: [code language="sql"]-- ### Schema all object DDL

使用Logstash JDBC获取Oracle数据的小问题

需要将Oracle中的数据,通过Logstash JDBC input插件,写入到Elasticsearch中,遇到了一个因为时间类型设置不正确导致的性能问题。为了能够不断的将数据增量写入Elasticsearch,做了如下配置: record_last_run => true        tracking_column => "mark_datetime"       tracking_column_type => "timestamp"        use_column_value => true 这里设置tracking_column_type出现了问题,数据库表中mark_datetime字段是Date类型。虽然整个pipline能够运行无误,但是运行效率发现不够好。到Oracle数据库中检查,发现SQL语句变成了 SYS_EXTRACT_UTC("M"."MARK_DATETIME")>TIMESTAMP' 2015-07-19 11:17:03.000000000’ 这就导致了MARK_DATETIME上现有的索引不能使用。Oracle在Date和Timestamp之间自动做了转换。

Run Blessed-contrib on windows

  With blessed-contrib it is easy to create terminal dashboards using ascii-art: blessed-contrib uses Braille fonts which are available by default on Linux and Mac distributions but not on Windows: In order to run such dashboards on windows you need to perform the following steps: 1. Download, open and install the FreeMono font.2. Follow these

删除Oracle Undo表空间

近期处理了一次删除、重建Undo表空间的事情,有些细节还是值得记下来备忘。事情的起因是工程师需要将分布在不同ASM磁盘组里的Oracle数据库文件,迁移到新建的ASM磁盘组,操作过程中,错误的删除了Undo磁盘组的所有文件。版本 11.2.0.4, RAC环境——测试、准生产环境;下文操作不保证在“生产环境”无害。 Step 1: 考虑新建Undo Tablespace,然后修改各个实例(Instance)的Undo_Tablespace 参数,使用新的Undo,然后删除老的Undo 表空间。 Step 2: 发现,此时无法新建表空间,报错Undo表空间的数据文件不可访问。 分析:我没有去细究原因,我想原因可能有两个,1是因为使用自动Undo管理,创建表空间的操作也需要获取Undo,所以报错??2是因为新建表空间,会触发类似checkpoint之类操作,有Active Tx还需要访问Undo?? Step 3:   修改undo_management=manual,再重试之前步骤 alter system set undo_management=manual sid=‘*’; Step 4: drop tablespace undotbs1 including contents and datafiles; Step 5: drop tablespace UNDOTBS2 including contents and datafiles * ERROR at line 1: ORA-01548: active rollback segment ‘_SYSSMU1_3780397527$’ found, terminate dropping tablespace

Aix平台查看进程打开的文件

最近刚好处理了一个Oracle数据库因为file descriptor耗尽,不能继续工作的案例。Oracle的MNL进程,打开了太多的文件,导致了这个错误。 背景: Unix中一切皆文件,socket,file… /proc 虚拟文件系统可以方便查看进程信息,包括打开的文件(fd,file descriptor) 大多数linux系统可以使用lsof来查看、使用/proc中包含的信息 Aix环境查看进程打开的文件 进入/proc/<mnl_process_pid>目录,查看fd子目录,可以查看所有打开的fd(file descriptor) # cd /proc/184422/fd# ls -l 这个文件夹下都是一些数字(fd),接下来使用相关工具,找到打开的都是什么文件 procfiles 命令 procfiles <process_pid> —— 命令使用方式 # procfiles 184422 Current rlimit: 2147483647 file descriptors    4: S_IFREG mode:0444 dev:10,5 ino:13407 uid:0 gid:0 rdev:0,0       O_RDONLY size:4811  会显示如上所示的信息,4 是 fd,文件在设备10,5上,文件系统的inode是13407下面我们来查看dev:10,5 对应哪块磁盘 # cd /dev # ls -l

ORACLE_HOME的设置与conn / as sysdba

最近发现了这一挺有意思的内容,以前没遇见过这个问题,或者遇见了,但是没有去思考、解决。 先回忆一下过程: 我是为了配置database vault,所以需要重新配置数据库的dbconsole(之前使用EM管理,但是后来EM服务器没人维护……这是另一个故事了)。 使用emca 配置dbconsole时,会要求输入ORACLE_SID 之类的,按说应该使用OS认证,完成数据库操作后,配置oc4j,一切ok……但是我操作的时候,提示我,不能连接到Oracle Instance,可能是实例未启动或者是ORACLE_HOME环境变量设置不正确——emca非常友好,还特别指出,可能ORACLE_HOME设置为以 / 符号结尾了,这样会导致emca不能连接到实例。 我查看了一下ORACLE_HOME,确实是以 / 符号结尾的(比如/oracle/app/product/11.2/),这时我并没有思考,只是简单想,有没有 / 符号,其实应该没区别的,既然emca认为不要有 / ,那我们就去除 / (如 /oracle/app/product/11.2)。 修改完环境变量后,重新运行emca,错误没有进展…… 这时有点挠头,用sqlplus / as sysdba 登陆数据库实例,检查一下哪有问题,这时候,我们发现 会显示为 connect to idle instance…… 这时我才意识到,启动Oracle Instance时的ORACLE_HOME,跟现在运行sqlplus时的ORACLE_HOME是不一样的,区别是少了一个 / 符号。这种情况下可能就没法连上实例了(这时候通过TNS连接还是可以的)。 总结一下来说,就是ORACLE_HOME设置不能以 / 结尾,否则emca没法设置。 这事有点坑人,如果是生产库,修改ORACLE_HOME,还得重启Instance…… 代价太大了。

Oracle RAC interconnect Traffic 监控

Oracle在AWR中提供了Estd Interconnect traffic(KB)指标,由于AWR默认只能查看小时级别的数据,做准实时监控需要以更小的时间粒度来计算这个指标。AWR怎么算的看不到,我们可以查看statspack计算这一指标的方法,在sprepins.sql中可以发现Statspack的计算公式: Estd Interconnect traffic = ((Global Cache blocks received + Global Cache blocks served)*db_block_size +(GCS/GES messages received + GCS/GES messages sent)*200)/elapsed time 在Oracle statistics中,Global Cache Blocks received等的名字转换参见如下SQL: SELECTDECODE(name,'gc cr blocks received','global cache blocks received','gc cr blocks served','global cache blocks served','gc current blocks received','global cache blocks received','gc current blocks served','global cache blocks served',name) AS

保险核心系统运维惊魂记

                        ??? SQL语句语法有错误,应用怎么不知道,也查不到???语法有错,应用逻辑不应该执行不下去么? 应用会抛出异常、从数据上也会看到数据没有被修改…… 为什么并没有呢??欲知后事如何,且听下回分解。

DPA 试用版

授权说明(License Rights and Restrictions) www.skyatlas.net授予您内部使用本程序的非排他性,不可转让的有限许可,受本协议中规定的限制,仅用于开发,测试,原型设计和演示您的应用程序,且仅限于您的应用程序尚未用于任何数据处理,业务,商业或生产目的,也不用于任何其他目的。您可以允许您的承包商使用本程序,前提是他们代表您行使本协议中授予的许可权利,并进一步规定您有责任在此类使用中遵守本协议。您将与您的承包商签订书面协议,严格限制其使用本程序的权利,并以与本协议相同的程度保护Skyatlas的知识产权。您可以在合理需要的范围内制作本程序的副本,以行使本协议中授予的许可权利。您可以制作一份程序副本以进行备份。 此外,您不可以: 删除或修改任何程序标记或任何Skyatlas或许可方所有权的通知;以任何方式向任何第三方提供本程序(除本协议中规定的代表您的承包商外);使用程序提供第三方培训;转让本协议或分发,给予或转让本程序或其中的权益给任何第三方,除非本承包商协议明确允许(上述内容不得解释为限制您可能另行拥有的权利)持牌第三方技术);导致或允许逆向工程(除非法律要求互操作性),程序的反汇编或反编译;和在未经Skyatlas事先同意的情况下披露任何计划基准测试的结果。本程序可能包含源代码,除非本协议中出于其他目的明确许可(例如,根据开源许可证授权),否则仅为参考目的提供源代码,并且不得修改。 Skyatlas保留本协议未明确授予的所有权利。如果您希望将本程序或您的应用程序用于本协议明确许可之外的任何其他目的,您必须根据允许此类使用的单独协议从Skyatlas或Skyatlas经销商处获得有效的程序许可。但是,您承认本程序可能不适合生产使用和/或Skyatlas可能不会将本程序的版本用于生产或其他目的;您使用本程序进行的任何开发或其他工作均由您自行承担风险。 所有权skyatlas或其许可方保留本计划的所有权和知识产权。 第三方技术本程序可能包含或要求使用随程序提供的第三方技术。 Skyatlas可能会在程序文档,自述文件或与此类第三方技术相关的通知文件中向您提供某些通知。第三方技术将根据本协议的条款许可给您,或者,如果在程序文档中指定,则根据单独条款向您发送自述文件或通知文件。您根据单独条款使用单独许可的第三方技术的权利不受本协议的任何限制。但是,为清楚起见,尽管存在通知,但未经单独许可的第三方技术的第三方技术应被视为本程序的一部分,并根据本协议的条款许可给您。 如果同意上述协议,您可以下载DPA 试用版本软件。如有商业使用需求,请联系skyatlas.net.link:Database Performance Analyzer for Oracle.

Oracle11g提高了DML修改父表时锁定子表的级别

近日处理了一个电信计费系统的性能故障,因为外键上没有索引,导致出现enq: TM 锁争用,以及不时出现Deadlock问题,处理完后整理资料,发现这篇blog叙述比较清晰,遂用Google Translate翻译如下: Oracle 11g(自11.1.0.6以来)引入了一个微妙但可能有重大的变化,关于在监管外键约束方面保持锁的方式。 以下内容已在11.2.0.1和11.2.0.2上进行了测试。 为了设置场景并复制我们在工作中遇到的问题,我将创建一个小表(ALBUMS),它有2个FK约束,指向两个父表(ARTISTS和FORMATS)并用几行填充它们。 SQL> CREATE TABLE artists (id NUMBER PRIMARY KEY, artist_name VARCHAR2(30)); Table created. SQL> CREATE TABLE formats (id NUMBER PRIMARY KEY, format_name varchar2(30)); Table created. SQL> CREATE TABLE albums (id NUMBER, album_name VARCHAR2(30), artist_id NUMBER CONSTRAINT artist_fk REFERENCES artists(id), format_id number CONSTRAINT format_fk REFERENCES formats(id)); Table created. SQL>