客户端SQL Plus请求连接,监听接受客户端的TCP连接,并获取客户端发过来的TNS数据包。
监听进程打开用于与子进程通信的管道,同时fork一个子进程,称为“监听子进程1”的子进程,然后监听进程一直等待,直到这个“监听子进程1”结束。
监听子进程1 Fork出子进程2。
完成上面一步,子进程1马上退出并结束子进程1。
子进程2收集本进程所在的主机名、IP地址及进程号等信息,并把子进程2重名成server process(这里我们也把server process叫前台进程或叫服务器进程),申请占用一小块PGA内存。
前台进程把主机名、IP地址及进程号发送给监听进程。
监听进程收到前台进程的信息,并返回客户端的信息(比如用户密码环境变量等)给前台进程。
前台进程查询USER$、PROFILE$等数据字典,校验用户名密码是否合法,如果用户密码错误就报错用户名密码无效,否则就与客户端进行交互。
客户端收到前台进程的信息与之交互,整个连接创建完成。
客户端发起一个连接,服务器端的监听创建一个shadow process,并把这个影子进程指派给用户,后期用户所有的操作都提交给shadow,shadow会替用户完成数据库内的操作,并把结果返回给用户。(中间件有点不同)
客户端发起update语句,根据客户端环境字符集转换成对应的编码,传到服务器端,