其中我们有用到事务,但是如果提示已经成功了就说明事务是提交了的,虽然我们在物理数据库中无法看到数据,但是如果再去执行之前的操作,就会提示用户数据已存在,这可能是内存数据库中有数据,我们的物理数据库和内存数据库是同步的,插入到内存数据库后就会同步到我们的物理数据库,我以为是同步未成功,所以去重启了下内存数据库,但是为何物理数据库中依旧没有数据呢?

解决方案 »

  1.   

    楼主程序中的事务有提交(执行commit;)吗?
      

  2.   

    很明显楼主你没有提交事务的!!!commit提交吧
      

  3.   


      但是如果没有commit事物应该回滚,然后我们后面的相关操作应该没有执行才对,但是后面操作的日志都成功且正确的打印出来了。这让我很疑惑。
      

  4.   


    SQL> set time on;
    7:23:14 SQL> 
    7:23:20 SQL> create table t as
              2  select * from scott.emp
              3  where 1=0;Table created7:23:20 SQL> insert into t 
              2  select * from scott.emp;14 rows inserted7:23:39 SQL> select * from t;EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
     7369 SMITH      CLERK      7902 1980-12-17     800.00               20
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
     7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
     7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
     7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
     7788 SCOTT      ANALYST    7566 1987-4-19     3100.00               20
     7839 KING       PRESIDENT       1981-11-17    5000.00               10
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
     7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20
     7900 JAMES      CLERK      7698 1981-12-3      950.00               30
     7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
     7934 MILLER     CLERK      7782 1982-1-23     1300.00               1014 rows selected7:23:43 SQL> commit;Commit complete7:23:49 SQL> select * from t;EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
     7369 SMITH      CLERK      7902 1980-12-17     800.00               20
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
     7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
     7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
     7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
     7788 SCOTT      ANALYST    7566 1987-4-19     3100.00               20
     7839 KING       PRESIDENT       1981-11-17    5000.00               10
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
     7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20
     7900 JAMES      CLERK      7698 1981-12-3      950.00               30
     7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
     7934 MILLER     CLERK      7782 1982-1-23     1300.00               1014 rows selected7:23:55 SQL> 
      

  5.   

    建立表,
    添加数据,马上就写redo和undo,
    未提交之前数据在data block cache中,显示提交或者隐式提交后数据才真正写到oracle 数据块中。