在AIX上编译VIM的一个问题

有一个项目需要使用AIX的机器 自然要装一些常用的东西 在 AIX 6.1 上自己编译 VIM 7.4 时 报了这么个错 In file included from os_unix.h:56, from vim.h:265, from gui_motif.c:36: /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:178: error: conflicting types for `lseek64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:176: error: previous declaration of `lseek64' In file included from /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:739, from os_unix.h:56, from vim.h:265, from gui_motif.c:36: /usr/include/sys/lockf.h:64: error: conflicting types for `lockf64' /usr/include/sys/lockf.h:62: error: previous declaration of `lockf64' In file included from os_unix.h:56, from vim.h:265, from gui_motif.c:36: /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:802: error: conflicting types for `ftruncate64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:800: error: previous declaration of `ftruncate64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:838: error: conflicting types for `truncate64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:836: error: previous declaration of `truncate64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:855: error: conflicting types for `pread64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:852: error: previous declaration of `pread64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:856: error: conflicting types for `pwrite64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:853: error: previous declaration of `pwrite64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:923: error: conflicting types for `fclear64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:920: error: previous declaration of `fclear64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:924: error: conflicting types for `fsync_range64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:921: error: previous declaration of `fsync_range64' In file included from vim.h:302, from gui_motif.c:36: auto/osdef.h:120: error: conflicting types for `lseek64' /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.3.0.0/3.3.2/include/unistd.h:178: error: previous declaration of `lseek64' make: The error code from the last command is 1. Stop. make: The error code from the last command is 2. 查了半天 这是因为AIX6的一个变化引起的 ...

2014年10月11日 · 2 分钟 · Hyacinthus

Oracle wait for a undo record 的解决

当 Oracle 的性能有问题的时候 有个要检查的地方是用dba用户 select * from v$session_wait 可以看到所有等待的事件 然后对着等待原因一条一条的google 其中有几种是可以忽略的 有的确实是会反映出问题 wait for a undo record 这个事件 如果出现了大量 是回滚的任务太多被卡住了 show parameter fast_start_parallel_rollback 看看这个参数 如果不是false 请改成关闭 alter system set fast_start_parallel_rollback=false; 它关闭的是回滚的并行操作 按理说是并行应该没什么问题 但是可能不成熟 多了就是会卡住 调整成串行很快卡住的任务就完成了 不要问我为什么 我也不知道 正在寻找 谁知道了也可以告诉我 具体的这个参数可以google 很容易找到官方说明 另文本文参考了如下这篇 这位作者还模拟了一把 更加敬业 https://blog.csdn.net/dbseeker/article/details/8795143

2014年5月16日 · 1 分钟 · Hyacinthus

ORACLE SEQUENCE 的 CACHE 参数问题

今日上线了个应用 发现测试上每笔一秒的交易生产上要5秒 经过追踪活跃的 session 情况 查到全部阻塞到了获取某个 Sequence 的下个值的时候 查阅了一下资料 发现建立 Sequence 的时候 Cache 这个参数很重要 尤其是在RAC集群环境下 设置了 Cache 以后 Oracle 会先将一定数据的序号取到内存里 大大的减少了锁等待的时间和写日志时间 但是在数据库 down 掉 关掉 或者干脆机器内存满了的时候 那些序号都可能消失掉 于是就发生 id 跳序号的情况 还有即使一切正常没有跳序号 RAC 环境还会有记录id次序和时间次序不一致的情况 但是肯定是不会出现重复序号的 所以其实还有一个 ORDER 参数 可以在 RAC 强制保持次序 当然会有一定代价 Cache 的默认值是20 如果使用频繁的话 建议保持在100以上 具体的数值可以在实际应用的时候测试一下 100的时候写入应该比 NOCACHE 能快很多倍 总之 我要说的是 在 RAC 环境下 如果是比较繁忙的应用 不要打 NOCACHE 的主意 完全无法接受 如果要求序列号连续 那只能在应用级别解决了 别想用数据库的 Sequence 了 对了 在把 Cache 从0调整到100后 我们的一个交易(大概有几十个insert) 从5秒降低到了0.5秒 以上基于 11g R2

2014年5月15日 · 1 分钟 · Hyacinthus

Oracle中使用分区表来归档冷数据

为了保持查询的效率 我们应当将不用的数据放在归档表中 另一种场景是业务只需要当天的数据 但是可能需要在后台查询历史数据以供错误分析等用途 这里演示一下如何使用Oracle的分区交换特性 来将数据归档到分区表 演示时主表是普通表 只存一天数据 每天跑批前将前一天的数据转移到按日分区的归档表 主表是分区表的情况可以自行推演 --使用分区表按日归档数据 --建立正常表 和索引 CREATE TABLE CUST_INFO ( CUST_ID VARCHAR2(30), CUST_NAME VARCHAR2(100), ETL_LOAD_DT DATE ) NOLOGGING COMPRESS; CREATE INDEX CUST_INFO_IDX ON CUST_INFO (CUST_ID); --建立归档用的分区表 和分区索引 计划每天一个分区 --分区索引只为演示更加全面,一般归档表无需索引 CREATE TABLE CUST_INFO_ARC ( CUST_ID VARCHAR2(30), CUST_NAME VARCHAR2(100), ETL_LOAD_DT DATE )PARTITION BY RANGE(ETL_LOAD_DT) (PARTITION CUST_INFO_ARC_INIT VALUES LESS THAN(TO_DATE('20140201','YYYYMMDD')) ) NOLOGGING COMPRESS; CREATE INDEX CUST_INFO_ARC_IDX ON CUST_INFO_ARC (CUST_ID) LOCAL; --在正常表中插入数据 我们要把它归档到分区表中 --所以用作分区的ETL_LOAD_DT只能出现同一天的日期 INSERT INTO CUST_INFO VALUES('1','Tom',TO_DATE('20140202','YYYYMMDD')); COMMIT; --检查数据是否插入 结果为1 SELECT COUNT(*) FROM CUST_INFO; --我们看看分区表的分区 结果只有一个字段 --在HIGH_VALUE字段可以看到分区的区间定义 SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='CUST_INFO_ARC'; --现在我们为了将数据归档,先要为当前日期建立一个分区 --注意我们放2月2日的数据 分区定义为小于2月3日 ALTER TABLE CUST_INFO_ARC ADD PARTITION CUST_INFO_ARC_20140202 VALUES LESS THAN(TO_DATE('20140203','YYYYMMDD')); --再次查看分区状态,现在有两个分区了 SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='CUST_INFO_ARC'; --在做操作前,我们检查两个索引的状态 --它们的状态应该都是VALID 或者USABLE SELECT T.STATUS,T.* FROM USER_INDEXES T WHERE INDEX_NAME='CUST_INFO_IDX'; SELECT T.STATUS,T.* FROM USER_IND_PARTITIONS T WHERE T.INDEX_NAME='CUST_INFO_ARC_IDX'; --重要:我们现在利用分区交换特性,将正常表中的数据交换到新建的分区 --注意日期必须与分区的限定匹配,否则会报错,有兴趣的可以自行尝试 ALTER TABLE CUST_INFO_ARC EXCHANGE PARTITION CUST_INFO_ARC_20140202 WITH TABLE CUST_INFO; --检查一下记录是不是已经被交换了 记录应该在分区表里 SELECT COUNT(*) FROM CUST_INFO; SELECT COUNT(*) FROM CUST_INFO_ARC; --现在我们再次检查两个索引的状态,交换操作并不会维护索引 --所以正常表的索引和被交换的那个分区索引都会失效。 SELECT T.STATUS,T.* FROM USER_INDEXES T WHERE INDEX_NAME='CUST_INFO_IDX'; SELECT T.STATUS,T.* FROM USER_IND_PARTITIONS T WHERE T.INDEX_NAME='CUST_INFO_ARC_IDX'; --交换完成后需要将索引重建一下,重建分区索引需要指定分区。 ALTER INDEX CUST_INFO_IDX REBUILD; ALTER INDEX CUST_INFO_ARC_IDX REBUILD PARTITION CUST_INFO_ARC_20140202; --现在再看一次,索引状态已经正常了。 SELECT T.STATUS,T.* FROM USER_INDEXES T WHERE INDEX_NAME='CUST_INFO_IDX'; SELECT T.STATUS,T.* FROM USER_IND_PARTITIONS T WHERE T.INDEX_NAME='CUST_INFO_ARC_IDX'; --其实做完大量的数据移动后,应该重新收集统计信息 --以便查询优化器更好的工作。请注意这里要输入用户名,自行替换。 BEGIN DBMS_STATS.GATHER_TABLE_STATS('MART','CUST_INFO');END; BEGIN DBMS_STATS.GATHER_TABLE_STATS('MART','CUST_INFO_ARC');END; --归档表可以利用程序按照策略方便的删除更旧的不用的数据。语句如下。 ALTER TABLE CUST_INFO_ARC DROP PARTITION CUST_INFO_ARC_INIT; --看看分区已经只剩下最新的一个了 --另外最后一个分区是无法删除的,可以自己尝试。 SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='CUST_INFO_ARC'; --实验到此结束 删掉所有的表 DROP TABLE CUST_INFO; DROP TABLE CUST_INFO_ARC;

2014年4月17日 · 2 分钟 · Hyacinthus

cx_Oracle中传入布尔值到存储过程

cx_Oracle 有个方法 cursor.callproc 它可以接受列表或者字典当作传入参数 但是我碰到了困难 如何都传入不了TRUE和FALSE Google了很久 只有一些人提出这个问题 没有答案 只能曲线救国了 sql="""BEGIN dbms_mview.refresh(:view, 'C' , 'ATOMIC_REFRESH' => FALSE ); end;""" cursor.execute(sql,(view_name,)) 希望谁知道怎么直接传入布尔值的给我留言说一下

2014年4月11日 · 1 分钟 · Hyacinthus

百度云好弱

虽然最近用百度云的人是越来越多 整天能看到各种福利的地址都是百度云 它的传输速度也真的很快 但是我遇到了很尴尬的问题 我想要把不同的电脑的文件夹备份到一起 我把它们指向了同一个云端的文件夹 但是…… 一模一样的文件夹和文件 它无法分辨 于是那个文件夹所有的文件都多了一份带(1)的 上面的还不是最弱的 我的台式机由于windows死活更新不了8.1 还无法更新MSE 被我重装了个最新的8.1 结果重新配置百度云的时候 我无法像dropbox那样把已有的文件夹重新和云端关联起来 重新设置了备份以后 好吧 所有的文件又都被重复了一份(2) 真是2 还没有去除重复的功能 现在我云端的文件夹已经乱的不忍直视了 我也不知道是我使用的方式不对还是怎么回事 没有找到很好的使用方法

2014年1月28日 · 1 分钟 · Hyacinthus

小事一件

今日客户要借我电脑查个东西 我就用chrome打开了个隐身窗口给他 我的主页是google 并且会智能翻墙 蛮自信的想清华毕业生想必会识货 过了一会儿 他还给我了 我看到开着三个页面 用google搜索了百度两个字 然后用百度搜索另一个东西 然后打开那个网页…… 其实是我期待太高了 真是脱节的国度

2014年1月15日 · 1 分钟 · Hyacinthus

在 OS X Mavericks 中使 NTFS 可写

现在的移动硬盘甚至u盘一般都用NTFS文件系统了 但是NTFS在苹果的操作系统里是只读的 有一个收费的软件可以管理NTFS的设备 但是我们自己努力一下也能用开源的程序做到 首先你得要有homebrew 对了 当然要把NTFS设备先都拔掉 然后在安装完ntfs-3g后 还要使用sudo做一些事情 一般人就是卡在了这里 brew update brew upgrade fuse4x brew upgrade ntfs-3g sudo mv /sbin/mount_ntfs /sbin/mount_ntfs.orig sudo ln -s /usr/local/sbin/mount_ntfs /sbin/mount_ntfs brew info fuse4x-kext 然后fuse4x-kext显示出了一些信息 要照着它做 也就是两个命令 这里请复制你屏幕显示出来的命令 别复制下面的示例 sudo /bin/cp -rfX /usr/local/Cellar/fuse4x-kext/0.9.2/Library/Extensions/fuse4x.kext /Library/Extensions sudo chmod +s /Library/Extensions/fuse4x.kext/Support/load_fuse4x 好了 现在再插上NTFS设备就已经可以写了

2013年12月22日 · 1 分钟 · Hyacinthus

Nexus 4 使用感受

我明白这篇文章没什么意义 因为 Nexus 5 马上就要出了呀 但是的确是刚买了一个 Nexus 4 Google 宣布 将其从 $299 调整到 $199 的时候 我便没忍住买了一个 现在才折腾到手 反正我们又不是在美国 N5 出来也要好久才能搞到手吧 感受最深的是 屏幕比 Nexus 3 好了几条街啊 我玩别人的 N4 的时候没有很大感受 可能时间太短 自己放家里一对比 真的差太多了 Nexus 3 的三星屏幕颜色黄很多 偏的不知道哪去了 N4 就还原很逼真 亮度和清晰度方面也好很多 第二个重点 就是外观 其实远看 这两个机器形状有点像 并不太看得出来 有同事还说 你怎么又买了一个一样的机器 但是近看 还是漂亮很多的 要是比背面 比 N4 漂亮的手机估计很罕见 当然这个颜色是很低调的 都是近看才能看出 第三个重点 性能的确是快了很多 Nexus 3 加上 4.1的系统基本做到了界面不卡 但是由于硬件的限制 我在几个程序之间切换还是吃力 不用的程序很容易被系统杀掉 导致一直要重新启动 而这新的机器在微博微信游戏之间来回切毫无压力 估计 Nexus 5 会更上一层楼吧 说说缺点吧 一个是外观导致的 摸手机出来的时候不知道哪面是正面 ...

2013年9月19日 · 1 分钟 · Hyacinthus

暴雪的决定

今天收到一个暴雪的邮件 由于可能是炉石传说的邀请 就仔细看了一下 结果发现语气很严重的样子 原来是要关闭暗黑破坏神3的拍卖行 我也当即被深深震撼了一下 虽然我已经好几个月没有玩D3了 但是一直留着 等待资料片的时候继续奋战 对这个系列的游戏 我还是很有感情的 当时D3要出现金拍卖行的时候 我还是挺赞许的 因为这个系列交易东西很麻烦 暴雪的初衷当然是为了给玩家提供方便 然后顺便 还能抽点税 我当时想 真是天才 着税钱估计都比卖游戏多了 我是深恶痛绝国内那些网游页游手游的收费方式的 是否将影响平衡的虚拟物品出售 是善恶的分界点 暴雪无疑一直是有原则的 不象EA之类学坏的好快 结果这个拍卖行就像蝴蝶效应里的蝴蝶 影响了太多 谁都没有想到 一个方便的功能竟然降低了游戏乐趣 我来事后诸葛亮的分析一下 我们生活中 时常会说 这是法国的葡萄酒 瑞士的手表 我喜欢吃山东的煎饼 西安的凉皮 各种各样的东西 都要运输以及交易才能得到 这也是大航海时代的魅力 而游戏EVE也继承了这个魅力 但是我们试想一下 如果有个世界通用的拍卖行 那么勃艮第的红酒也许就不是一瓶几百元 可能10欧就买到了 我也可以花3块买一碗西安秦镇的凉皮 它直接出现在我桌子上 我不用再忍受7元才能买到的不好吃的凉皮 这个时候 那些卖7元凉皮的和做长城干红的 岂不是很挫败 自己已经很努力了 但是拍卖行上有无数比自己便宜且更好的东西 其实我这个例子有不恰当的地方 暗黑3的装备并不分产地 所以也没必要运输 但是这个可以展示更多装备的平台使得物品的稀有度变低 而大大加剧了极品和普通物品的价格比是事实 更贴切的例子是孔子说登东山而小鲁 登泰山而小天下 本来几个朋友间的一件极品 人人羡慕 可放到论坛上 只是较好的东西 本来论坛上的极品 现在有了拍卖行 发现只是不错 于是 很难碰到很酷的东西 觉得很挫败 最后不玩了 ...

2013年9月19日 · 1 分钟 · Hyacinthus