MyCATApache / Mycat-Server

GNU General Public License v2.0
9.49k stars 3.85k forks source link

1.6使用subTables属性select count时报空指针异常 #1144

Open yintaiyuan opened 7 years ago

yintaiyuan commented 7 years ago

mycat1.6 使用subTables属性实现单库分表,使用oracle进行存储,当进行select count操作时,mycat控制台会报空指针异常:

2016-10-11 14:29:57.517 WARN [BusinessExecutor4] (io.mycat.backend.mysql.nio.handler.MultiNodeQueryHandler.handleDataProcessException(MultiNodeQueryHandler.java:660)) - caught exception java.lang.NullPointerException at io.mycat.sqlengine.mpp.UnsafeRowGrouper.aggregateRow(UnsafeRowGrouper.java:589) ~[Mycat-server-1.6-RELEASE.jar:?] at io.mycat.sqlengine.mpp.UnsafeRowGrouper.addRow(UnsafeRowGrouper.java:556) ~[Mycat-server-1.6-RELEASE.jar:?] at io.mycat.sqlengine.mpp.DataNodeMergeManager.run(DataNodeMergeManager.java:373) ~[Mycat-server-1.6-RELEASE.jar:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_13] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_13] at java.lang.Thread.run(Thread.java:722) [?:1.7.0_13]

配置如下(使用自然月进行分片): `

create_time partbymonth
</tableRule>`
`   <function name="partbymonth"
    class="io.mycat.route.function.PartitionByMonth">
    <property name="dateFormat">yyyy-MM-dd</property>
    <property name="sBeginDate">2016-07-01</property>
</function>`

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">     
    <table name="SYS_LOG" needAddLimit="false" primaryKey="ID" dataNode="dn1" subTables="SYS_LOG_201607,SYS_LOG_201608,SYS_LOG_201609,SYS_LOG" 
           rule="sharding-by-month">
    </table>
</schema>
<dataNode name="dn1" dataHost="dataHost01" database="test"/>
<dataHost name="dataHost01" maxCon="1000" minCon="1" balance="0"
          writeType="0" dbType="oracle" dbDriver="jdbc">
    <heartbeat>select 1 from dual</heartbeat>
    <connectionInitSql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</connectionInitSql>
    <writeHost host="hostS1" url="jdbc:oracle:thin:@192.168.1.1:1521:NYY1" user="test"
               password="test" />
</dataHost>

其他查询操作正常,请问各位大侠该如何解决?谢谢

yintaiyuan commented 7 years ago

而且发现每次连接数据库时,debug都会显示发送了这样一条语句, 1 -> dn1{SELECT @@character_set_database, @@collation_database} 但是却执行不了 execute sql err : errno:936 ORA-00936: 缺失表达式 不知有没有影响。。。

magicdoom commented 7 years ago

你mysqljdbc 驱动版本多少 试试5.1.35

yintaiyuan commented 7 years ago

@magicdoom 你好,我底层连得是oracle,这跟驱动有关系吗?那oracle应该用哪个驱动呢?谢谢

magicdoom commented 7 years ago

你连mycat用的mysql的 jdbc驱动

yintaiyuan commented 7 years ago

@magicdoom 试过5.1.35也一样的错误。。。我用navicat连也一样。。。