Author Archives: (adam)

oracle 12c之使用Restful接口访问JSON数据

1、安装补丁20885778 先关闭数据库和监听 安装补丁 验证补丁是否已经安装 2、安装SODA for REST 首先需要安装JDK 1.7或更高版本 使用RPM包安装完成后,更改环境变量,并切换到新安装的JDK 安装SODA 安装成功后,如果选择start in standalone mode选项,服务就已经启动了。 在数据库中启用ORDS功能 为测试方便,停用ORDS的权限检查功能 3、SODA的Restful接口测试 3.1 查询所有的集合 返回结果 3.2 增加books的集合 返回结果 无正文内容,状态码为201 Created 3.3 重新查询所有的集合 返回结果 3.4 创建单条记录 发送内容,POSTMAN中,选择RAW类型,格式为JSON(application/json) 命令行: 返回结果 3.5 批量创建 发送内容 返回结果 3.6 根据ID查询单条记录 返回结果 3.7 更新单条记录 发送内容 返回结果 正文无,状态码为200 OK 重新执行3.6的查询,返回结果为 3.8 在数据库中查询上述步骤插入的3条记录 查看表结构 注意:因表名称为小写,查询的时候表名称必须加双引号 3.9 删除单条记录 返回结果 [...]

oracle 12c新功能之JSON数据类型支持

oracle 12c提供了原生的json类型支持,json的数据可以存放在VARCHAR、CLOB、BLOB的数据类型中,查询的字段可以直接下探到json对象的属性,在做一些快速原型应用的时候可以非常灵活支持业务对象属性的变更。 1、创建包含json对象的表 2、插入一些测试数据 3、查询json对象及其属性,json对象的值也可以作为查询条件 上面这种写法,必须使用表的别名,才能引用json对象的属性。 也可以使用json_value的函数 4、索引创建在json对象的属性上,本质上是一个函数索引 从上一步查询语句的执行计划,可以看到查询中确实使用了索引 5、使用json_exists函数,判断json对象是否存在某个属性,使用json_query返回整个json对象 6、如果json中含有数组类型,可以使用json_table函数展开,可以其他列的数据做join操作。 上面article_id=2的数据,article_comments是个数组,包含两个comment的json对象,使用json_table展开后,article_id=2的行在结果集中会变为2行,每行一个comment对象对应的属性。 ARTICLE_ID ARTICLE_TITLE COMMENT_BY COMMENT_CONTENT 1 oracle 12c新特性 adam TOM大神的好书 2 PL/SQL揭秘 frank 值得一读 2 PL/SQL揭秘 john 适合有经验的开发者 7、查询哪些列使用了json类型 参考资料: The new SQL/JSON Query operators (Part1: JSON_VALUE) The new SQL/JSON Query operators (Part2: JSON_QUERY) The new SQL/JSON Query operators (Part3: JSON_EXISTS) The new SQL/JSON [...]

oracle 12c新功能之inmemory option

oracle 12c inmemory功能,不仅仅是将数据放入内存,而且采用了列存储和特殊的查询方式(SIMD vector instructions),可以短时间内快速进行大量数据的是扫描,因此对于大表的全表扫描速度得到了很大的提升;对于开发者内存数据的访问、更新完全是透明,不需要再应用程序做任何处理,只需要在数据库中配置哪些表启用inmemory功能。

1、修改数据库参数,以启用数据库的inmemory功能
2、重启数据库
3、查看inmemory的参数是否生效
4、测试表的行数和占用空间(表记录300万,占用2.3G空间)
5、测试从磁盘读取和内存读取的逻辑读差异
6. 总结
原表记录数3419561,占用空间2304M,全表扫描一次逻辑读次数292417,花费时间1.83秒
使用inmemory特性后,占用空间184M,占原表大小约8%,内存中全表扫描一次逻辑读次数23,是直接扫描表方式的万分之一,花费时间0.11秒
根据inmemory的特点,比较适合用于从大量数据进行筛选、过滤,返回结果较少场景,可以节省因创建大量不同查询条件索引占用额外的空间,提升查询效率和响应时间

使用sqlplus导出文本文件的脚本

在Oracle中调用操作系统命令

1、准备工作 修改当前用户的权限,可以创建JOB、创建外部命令的JOB 设置执行操作系统命令的用户 将run_user和run_group设置为oracle所在的用户和组 参考资料: Guide to External Jobs on 10g with dbms_scheduler 2、创建JOB 注意:JOB_NAME不能有特殊字符,建议为字母、数字或下划线,实际测试中不允许名字中包含横线。 3、JOB设置参数 4、运行JOB 5、如何执行另外一台服务器上的命令 首先需要设置可以通过证书直接登录目标服务器: 通过SSH执行远程服务器上的命令 注意:远程登录后用户的参数文件未加载,相关的环境变量不正确;为保证调用脚本可以正常运行,建议在目标服务器上将执行的命令封装为脚本,在脚本中将bash_profile中相关的环境变量在脚本中重新设置。 6、查询JOB的运行情况

Oracle中日期运算实例

下面的例子列出常用的按照年、月、周进行计算的函数,假设当天为2016-02-03 运行结果: TODAY TODAY_OF_2MONTH_AGO FIRST_DAY_MONTH LAST_DAY_MONTH FIRST_DAY_YEAR FIRST_DAY_WEEK NEXT_FRIDAY 2016/2/3 2015/12/3 2016/2/1 2016/2/29 2016/1/1 2016/1/31 2016/2/5  

PL/SQL函数缓存测试

一、创建测试的表,并初始化测试数据 二、创建带缓存的函数 三、执行结果和统计信息 第一次: 第二次查询: 三、表新增或更新数据,缓存将失效 再次运行同样的语句,发现consistent gets不为零,说明缓存失效,oracle重新从表读取了数据

SQLSERVER的CTE递归查询

SQLSERVERCTE递归查询,虽然语法上比Oracle的麻烦一些,但本身比较简单,下面这个例子主要是取出顶层节点、层级数,额外增加了一点代码 创建测试表: 插入测试数据 查询语句: 运行结果: start_id id name pid level A1 A1 公司1 A 1 A2 A2 公司2 A 1 A2 A21 公司2-部门1 A2 2 A2 A22 公司2-部门2 A2 2 A1 A11 公司1-部门1 A1 2  

PL/SQL的常用设置

一、显示所有打开的窗口,并永久生效 菜单:Tools -> Window List 菜单:Window -> Save Layout 二、默认显示My Objects,提高数据库对象的展开速度 菜单:Tools -> Browser Filters,将My Objects设置为默认 三、调整数据库对象的显示顺序,最常用的放在前面 菜单:Tools -> Browser Folders 建议显示顺序为:Recent Objects | Tables | Sequences | Views | Tablespaces | Fucntions | Procedures | Tiggers | Database Links | Jobs | Users | Recycle bin,其他顺序不变,可以根据自己的习惯调整。 四、编辑器设置:关键字自动转化为大写 菜单:Tools -> Preferences -> User Interface -> [...]

[转]TCP的三次握手和四次分手

原文地址:简析TCP的三次握手与四次分手 下面是最核心的一张图: 三次握手过程 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认; 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。 四次分手过程 当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次分手”。 第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了; 第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我也没有数据要发送了,可以进行关闭连接了; 第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入CLOSE_WAIT状态; 第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。