更新时间:2018年7月16日 11:22:28

一、 系统

1. 打开防火墙后 Oracle 无法链接

新建1521端口规则。

二、知识

A. 序列

1. nextval

-----------------------------------

select seq_device_dztx.nextval from dual; 每查询一次序列的 nextval ,该值就增加一次。注意仅仅是查询序列,序列就会自增一次。

所以,很有趣的就是

select seq_device_dztx.nextval from dual;
select seq_device_dztx.currval from dual;

他们一起运行的结果永远都是一样的。

---------------------------------------

但是这里的 seq_no 和 party_id 却会是一样的。

insert into student (seq_no , party_id ) select x_seq.nextval as seq_no , x_seq.nextval as party_id  FROM person

参考

---------------------------------------

B. 日志

Oracle数据库的最常用问题定位日志是alert日志,Oracle数据库的日志文件alert_$ORACLE_SID.log记录了重作日志的转换,数据库启动和关闭,数据库结构的改变,回退段的修改,死锁,内部错误等信息。

Oracle老版本路径是$ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.log

Oracle 11g 日志文件在$ORACLE_BASE/diag/rdbms下面

三、技巧

A. 导出表结构.用于注释

直接将oralce中表结构导出 Word 很复杂,网上流传的 DBExportDoc ,这玩意需要两个前提才能工作:1. 主机已经安装有OleDB 驱动(即需要安装oracle)2. 主机要有Office(含VBA,WPS个人版无VBA)。这里有简单但是需要手工的办法。

使用Oralce SQL Developer,在SQL窗口中输入如下SQL语句,然后“运行语句”(Ctrl+Enter)(注意不是点击“运行脚本”,否则很难复制到Excel中),发现会出现整体的表格。

SELECT t.table_name,
t.colUMN_NAME,
t.DATA_TYPE || '(' || t.DATA_LENGTH || ')',
t1.COMMENTS
FROM User_Tab_Cols t, User_Col_Comments t1
WHERE t.table_name = t1.table_name
AND t.column_name = t1.column_name;

将查询结果导出或者复制到Excel 中,删掉系统表和视图,剩下的自己整理即可。这比网上搜索半天下载个无用软件省事。

B. Oralce无法删除表,ORA-00054:资源正忙,要求指定NOWAIT 错误

原因分析:

1:创建索引时会产生的锁

2:dml 语句会产生的锁

3:索引创建时加上关键字 online时产生的锁

解决办法:

--这是注释
--1:找出所有被锁的对象,定位出哪个回话占用
select l.session_id,o.owner,o.object_name
from v$locked_object l,dba_objects o
where l.object_id=o.object_id; --2:找出所有照成锁的会话
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time; --3.kill 所有占用资源的会话
--命令形式:alter system kill session 'sid,serial#';
alter system kill session '498,583';

参考

C. 含有CLOB类型的表数据导出与导入

当表结构中含有 CLOB 字段时,一般的图形化导出为 insert SQL文件和 XLS 文件时,CLOB 字段的值是无法导出的。

只能使用 dmp/imp 命令。

当需要导出部分表时,使用 tables = tablename1,tablename2 参数:

exp username/pwd@sid file=C:\\xxx.dmp tables=mytable1,mytable2

当导入时,使用 imp ,参数类似:

imp username/pwd@sid file=C:\\xxx.dmp tables=mytable1,mytable2

如果目标数据库中已经有该表存在,或者创建表时表空间不一致,导致数据无法导入。

这时可以使用  ignore=y  参数,这样会忽略表存在和表空间不一致错误,继续导入数据。

imp username/pwd@sid file=C:\\xxx.dmp tables=mytable1,mytable2 ignore=y

Oracle 11g 亲测有效,本方法可以很方便的导出导入 CLOB 类型数据。

后面也遇到部分表无法导出CLOB数据,我采用将该表的数据导出为 Excel 的 xls 格式,然后在用图形化工具或其它工具导入即可。

四、排错

1. ORA-01000: 超出打开游标的最大数(解决及原因)

修改Oracle最大游标数:

查看最大游标数: show parameter open_cursors;

查看当前打开游标数: select count(*) from v$open_cursor;

修改最大游标数: alter system set open_cursors=1000 scope=both;

修改代码:

这样的错误很容易出现在Java代码中的主要原因是:Java代码在执行conn.createStatement()和 conn.prepareStatement()的时候,

实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的 createStatement和prepareStatement是在一个循环里面的话,

就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。

另外:

有一个问题说明 connection 与 prepareStatement 进行 close 的关系, 但这里只是说明了直接 close connection, 而没有说明直接 close prepareStatement.。

二者是不同。

问:

用CONNECTION 创建了 PREPAREDSTATEMENT ,用完了 PREPAREDSTATEMENT 后,没有关闭PREPAREDSTATEMENT ,而是直接 CLOSE CONNECTION ,这么做有什么隐患吗?

答:

如果没有使用数据库连接池,而是每次创建物理连接,然后释放的话,没有什么问题。close Connection的时候已经把数据库资源完全释放掉了,PreparedStatement占用的数据库游标也会随即释放。 但是大部分情况读写数据库都会采用数据库连接池来提高连接效率,在这种情况下有潜在的隐患。 因为数据库连接池中拿到一个Connection,close的时候不是真正关闭连接,释放数据库资源,而是把连接归还给连接池。因此在这种情况下,close了Connection,但是PreparedStatement并没有被释放掉,占用的数据库游标仍然处于打开状态。因此在大数据访问量的情况下很容易出现数据库游标使用到最大,无法分配游标错误。

五、高级玩法:优化

《Oracle 性能优化求生指南》  人民邮电出版社  Guy Harrision 著

---------------------------------------------------------------------------------

每一条SQL语句在客户端都表现为一个游标。P12

在Java的JDBC中,一个游标等价于一个 Statement 或者 Prepared Statement 对象。P13

SQL 语句必须完全一致才能在共享池中找到匹配项。(博主注:应在SQL语句中使用绑定变量,而不是使用字面量值)。 P14

Oracle小知识_长期总结的更多相关文章

  1. SQL小知识_长期总结

    1. 左联接右联接区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner ...

  2. oracle小知识

    设置显示执行时间 set timing on; 不显示:off 最简单的块: begin dbms_output.put_line('Hello,World'); end; 执行结果出现这种情况(执行 ...

  3. oracle 小知识

    oracle: 数值随机的函数是 dbms_random.value(最大值,最小值)   用法是select dbms_random(3,0) from dual; oracle: 获取前100条 ...

  4. Oracle小技巧_不同表空间不同用户导入导出数据dmp

    [博主注:数据库方面 ITPUB网站及博客内容非常丰富]   转载来源ITPUB 博客 经常有人会问:原来的数据在USERS表空间里面,我想把它IMP进APP表空间,我已经修改了目的用户的默认表空间, ...

  5. oracle小知识总结

    1,表列的五种约束 not null, unique,primary key, foreign key, check 2,权限分配 grant 权限 on 表 to 用户 3,表和视图的区别 视图是一 ...

  6. Oracle常用知识小总结

    永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! Oracle常用知识小总结 1. 创建自增主键 对于习惯了SQL SERVER的图形化界面操作的SQLer,很长一段时间不用oracle ...

  7. Oracle基础知识汇总一

    Oracle基础知识 以下内容为本人的学习笔记,如需要转载,请声明原文链接   https://www.cnblogs.com/lyh1024/p/16720759.html oracle工具: SQ ...

  8. HTML小知识---Label

    今天知道了一个html小知识: <input type="checkbox" id="chkVersion" />                 ...

  9. s性能优化方面的小知识

    总结的js性能优化方面的小知识 前言 一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够 ...

随机推荐

  1. Java通过IO流输入输出 向文件中存入大量三个属性的值,并通过验证前两个属性输出第三个属性

    package ABC1; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import ...

  2. 《SQL 进阶教程》 自连接分组排序:练习题1-2-2

    分组排序 SELECT d1.district, d1. NAME, (SELECT COUNT(d2.price) FROM district_products d2 WHERE d2.price ...

  3. ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps (线段树:无序数组找到第一个小于val)

    题意:n个房间,每个房间有ai盏旧灯,每个月可以买m盏新灯,要求:按房间顺序换灯,如果剩下的新灯数目大于ai,那么进行更换,否则跳过该房间,判断下一个房间.如果所有房间都换完灯,那么久不会再买新灯. ...

  4. Python 起步 多版本共存配置

    上次我选择的是py2.x,如果我要再装一个py3.x呢 我们去设置环境变量,然后去命令行输入python,这里我故意把环境变量放在第一行,貌似换成3.7了 我们把2.7的放在3.7的前面呢?又换回去了 ...

  5. Angular2.0的学习(二)

    第二节课 1.了解路由的基础知识 2.子路由.辅助路由.路由守卫和保护路由 路由守卫: CanActivate:处理导航到某路由的情况 CanDectivate:处理从当前路由离开的情况 Resolv ...

  6. Xml2Object

    <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream ...

  7. Jmeter4.0----HTTP Cookie管理器_抓取cookie中的参数(13)

    1.说明 请求结束后,要通过登录用户的JSESSIONID判断用户是否登录成功 2.步骤 第一步:添加 HTTP Cookie管理器 录制前,创建”线程组”,线程组=>配置元件=>HTTP ...

  8. jquery——样式操作

    思想:同一个函数完成取值和赋值 addClass.removeClass. <!DOCTYPE html> <html lang="en"> <hea ...

  9. java Smaphore 控制并发线程数

    概念: Semaphore(信号量)是用来控制同事访问特定资源的线程数量,它通过协调各个线程,已保证合理的使用公共资源. 应用场景: Semaphore 可以用于做流量控制,特别是共用资源有限的应用场 ...

  10. 工作经验(Unity篇)

    我的工作是C++开发,主要是做底层,其中绝大部分是给Unity调用的,以下是我的脚印,希望不会重蹈覆辙 Unity具有强大的跨平台性,但是使用到库文件不尽相同,例如Android中就使用so库文件,W ...