CONNECT连接时确认用户名和密码,通过后形成SESSION?

解决方案 »

  1.   

    Oracle中的Connect、session和process的区别
      

  2.   

    您好:
    這一篇完章我之前有看過,但就是概念很模糊
     一个数据库的Connect可以有一个或多个session,同时connect也可以有一个或多个process.
      在专业服务器连接方式中,一个session对应一个process,在共享服务器方式中,一个process可以为多个session。
      一个session也可以存在若干个process中,并行同样是一个session对应一个process,主session是coordinator session,每个parallel process同样会对应数据库里一个单独的session。
    1.若SQL PLUS:
      CONNECT连接时确认用户名和密码,通过后形成SESSION?
       是指 我開啟一個 SQL PLUS 視窗,輸入帳號密碼,成功連線,算1個 CONNECT ,然後又有1個SESSION嗎?
       若是1個CONNECT 有多個 SESSION,那又該如何認定?2.若是SQL DEVELOPER:
    我新增「連線」(有帳號/密碼),這算1個CONNECT 嗎?
    那此時 SESSION 在哪邊?
    同理 若是1個CONNECT 有多個 SESSION,那又該如何作業?謝謝!
      

  3.   

    另外,新增一個USER,要授權CONNECT 即可,還是 SESSION 即可?
      

  4.   

    先回答这个问题,然后回答上面别的问题。
    新增一个user,首选connect角色和create session权限是不一样的,
    connect角色包括create session/create view/create table/alter session/create cluster/
    create synonym/create sequence/create database link这些权限的(具体可以通过
    select * from role_sys_privs where role='CONNECT';)。
    总结:connect角色包含create session权限。至于上面说的connect、session、process差异。
    个人感觉:
    connect和session是一对多的关系,session和process是一对多的关系;
    因此connect和process是一对多的关系。
    楼主比较纠结的是connect和session为啥是一对多的关系,如何体现,这个证明不难的。
    楼主应该用过全局临时表和plsql developer吧?
    当建立一个基于session的全局临时表时候,新的session登入时候查询这个临时表,肯定为空,
    那么就可以做实验了。
    用plsql登陆,打开一个窗口创建基于session的全局临时表,在这个窗口向全局临时表插入数据,然后查询
    ,肯定有结果,然后新建一个sql窗口,查询肯定没有结果。
    那么证明这次登陆就是一个connect,而每一个新的sql窗口对应不同的session。
    具体测试结果就不截图,附上建表神马的代码:
    create global temporary table tt2(t number)
     on commit  preserve rows;
    insert into  tt2 values(1);
    insert into  tt2 values(2);
    select * from tt2;    --(查询出结果)
    --新建sql窗口
    select * from tt2;   --(未未未查询出结果)
      

  5.   

    connect  是可以登录,
    session 是创建session。
      

  6.   

    您好:
     謝謝 arlen1990 解說,但有些問題想請教
    我是用具有SYSDBA 權限的 USER_A來做:
    1.我查到的CONNECT 預設只有 CREATE SESSION ,您說的其他權限 是否後面加上去的?
    SELECT * FROM dba_sys_privs WHERE grantee IN ('RESOURCE', 'CONNECT') ORDER BY 1;--要在SQL PLUS 中,用/AS SYSDBA 查  
    select * from role_sys_privs where role LIKE '%CONNECT%'; --只有CREATE SESSION 
    select * from role_sys_privs where role LIKE '%RESOURCE%';--在SQL DEVELOPER 中無法用 /AS SYSDBA2.因為我是用ORACLE SQL DEVELOPER 來做,非PLSQL ;
    所以當我
    SQL視窗_A: 建立,新增資料後, 當然查出結果

    SQL視窗_A:查詢-->依然有結果.所以,我就一直測不出 .
      

  7.   

    不好意思,可否再幫忙確認一下,只剩下1小步!
    SQL DEVELOPER  有辦法測嗎?
    謝謝!
      

  8.   

    1.第一个是我记得之前是那样子,难道是改动了,昨天是没有做测试的。你既然查到结果是这样,
    select * from role_sys_privs where role LIKE '%CONNECT%'; --只有CREATE SESSION
    那就说明create session和connect角色一样。
    2.sqldevelopper我这边用不了,没办法给你测试。
    这个connect可以对应多个session,这个只是个结论,工作生产用不到,
    估计只有考试题里面会用到了。这个session也是oracle自己定义的一个
    名词。不理解也没什么的。我列举的例子只是帮助你明白,这个问题无需深究啊。
    下面给你提供plsql developer里面测试截图吧。
    同一用户登录下的plsql,这是用我上面说的代码在窗口A创建的基于session的全局临时表,可以
    查到数据。这里解释下基于session的全局临时表,也就是只有当前session可以看到当前session
    插入的数据,各不同session之间是完全独立的。然后,不切换用户情况下,也就相当于同一connect下,新建另外一个窗口B,相当于不同session B,
    查询表,是没有数据的。
    综上,我是利用基于session的全局临时表特性来从侧面证明(或者说帮你理解)一个connect包含
    多个session。
    ***********************OVER
      

  9.   

    您好:
    謝謝您的回覆。那 process 也是DB 後端的事嗎?,需要了解嗎?
      

  10.   

    我自己感觉这些只要了解下就好。
    数据库运行在服务器上,当然后要产生进程。
    process就是对应操作系统里面的进程啊,正常情况下一个session产生一个后台的
    进程,不过也有有可能是一对多、多对一的关系。这个就是你建立一个session,然后
    后台产生一个进程或者多个进程,同时一个进程又有可能对应多个session的。了