我在后台用sqlplus 能连接数据库但是我用proc的代码编译后的程序连接数据可就报:
ORA-01034: ORACLE not available
ORA-27101: shared memory ed memory realm does not 
求教各位这是怎么回事啊
 
sqlnet.ora有配置:
SQLNET.AUTHENTICATION_SERVICES = (BEQ,NONE)listener.ora配置:
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = “oracle所在ip”)(PORT = 1521))
    )
  )SID_LIST_LISTENER =
    (SID_LIST =
      (SID_DESC =
        (GLOBAL_DBNAME = ORAC146)
        (SID_NAME = ORAC146)
        (ORACLE_HOME = /opt/oracle/app/oracle/product/11.1.0/db_1)
      )
    )proc关键代码:
EXEC SQL BEGIN DECLARE SECTION;
    VARCHAR username[20];
    VARCHAR passwd[20];
    VARCHAR dbname[20];
    char db_link_name[20];
EXEC SQL END DECLARE SECTION;
......
    EXEC SQL CONNECT :username IDENTIFIED BY :passwd
     AT :db_link_name USING :dbname;...... Oracleproc数据库C/C++

解决方案 »

  1.   

    数据库的启动信息
    SQL> startup; 
    ORACLE instance started.Total System Global Area 5010685952 bytes
    Fixed Size                  2143984 bytes
    Variable Size            3087010064 bytes
    Database Buffers         1879048192 bytes
    Redo Buffers               42483712 bytes
    Database mounted.
    Database opened.
    SQL> 该程序想实现在本地登陆别的id上的指定db
    源程序:
    EXEC SQL BEGIN DECLARE SECTION;
        VARCHAR username[20];
        VARCHAR passwd[20];
        VARCHAR dbname[20];
        char db_link_name[20];
    EXEC SQL END DECLARE SECTION;EXEC SQL INCLUDE SQLCA;int main(int argc, char** argv)
    {
        printf("begin %s\n",argv[0]);
        
        strcpy(username.arr,argv[1]);
        username.len = strlen(username.arr);
        
        strcpy(passwd.arr,argv[2]);
        passwd.len = strlen(passwd.arr);
        
        strcpy(dbname.arr,argv[3]); //"d:ORCL151"
        passwd.len = strlen(dbname.arr);
        
        memset(db_link_name,0,sizeof(db_link_name));
        strcpy(db_link_name,argv[4]);//"ORCL151"
        
        
        //EXEC SQL DECLARE db_link_name DATABASE;
        
        EXEC SQL WHENEVER SQLERROR do sqlerror();
        EXEC SQL CONNECT :username IDENTIFIED BY :passwd
         AT :db_link_name USING :dbname;
        
        printf("Connect to ORACLE as username:%s",username);
        
        //LOGOUT 
        EXEC SQL COMMIT WORK RELEASE;
        
        printf("end %s\n",argv[0]);
        
        return 0;
    }sqlerror()
    {
      EXEC SQL WHENEVER SQLERROR CONTINUE;
      
          printf("ORACLE error detected:\n");
          printf("%s\n",sqlca.sqlerrm.sqlerrmc);
      EXEC SQL ROLLBACK WORK RELEASE;
      exit(1);
    }程序执行:
    ./test username password orcl151 db151报错就是我开始说的 ORA-01034 和 ORA-27101
    本人新手求大神指教啊
      

  2.   

    我也遇到类似的情况,不过我是开始的时候可以工作,过一段时间什么都不做,再操作就不行了,报ORA-01034 和 ORA-27101,需要登陆sqlplus用startup重启一下才行。大家有没有碰到过这种情况呢?