2017060312C sqlplus显示用户上次登录时间

[20170603]12C sqlplus 显示用户上次登录时间.txt

--//12c sqlplus使用sqlplus登陆会显示上次登陆的时间.实际上其他管理工具toad也一样.

D:\tools\rlwrap>sqlplus scott/btbtms@test01p
SQL*Plus: Release 12.1.0.1.0 Production on Sat Jun 3 18:11:08 2017
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Last Successful login time: Sat Jun 03 2017 18:10:15 +08:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

--//不显示执行如下:
D:\tools\rlwrap>sqlplus -nologintime scott/btbtms@test01p
SQL*Plus: Release 12.1.0.1.0 Production on Sat Jun 3 18:11:30 2017
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SCOTT@test01p> select sysdate from dual ;
SYSDATE
-------------------
2017-06-03 18:12:28

--//退出再进入.
D:\tools\rlwrap>sqlplus scott/btbtms@test01p
SQL*Plus: Release 12.1.0.1.0 Production on Sat Jun 3 18:13:01 2017
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Last Successful login time: Sat Jun 03 2017 18:11:30 +08:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

--//你可以发现-nologintime仅仅是不显示,而实际上记录在数据库的 sys.user$中的.(spare6字段)
--//你可以想象如果应用频繁这样登录登出也修改sys.user$,就会存在争用问题.

--//参考我写的http://blog.itpub.net/267265/viewspace-1805291/=>[20150920]12c新特性:Last Successful login time.txt
--//如果检查共享池,可以发现类似的语句:
--//sql_id='395829wtbubru
SELECT exptime,
       ltime,
       astatus,
       lcount,
       spare6
  FROM user$
 WHERE user# = :1;

--//sql_id='d0dwv6jcszbqj'
UPDATE user$
   SET exptime =
          DECODE (TO_CHAR (:2, 'YYYY-MM-DD'),
                  '0000-00-00', TO_DATE (NULL),
                  :2),
       ltime =
          DECODE (TO_CHAR (:3, 'YYYY-MM-DD'),
                  '0000-00-00', TO_DATE (NULL),
                  :3),
       astatus = :4,
       lcount = :5,
       spare6 =
          DECODE (TO_CHAR (:6, 'YYYY-MM-DD'),
                  '0000-00-00', TO_DATE (NULL),
                  :6)
 WHERE user# = :1;
--//注意看sql_id='d0dwv6jcszbqj'是dml语句,你可以想象如果应用存在大量登录,是否会修改这个时间呢?

SCOTT@test01p> select sql_id,executions from v$sql where sql_id in ('395829wtbubru','d0dwv6jcszbqj');
SQL_ID        EXECUTIONS
------------- ----------
395829wtbubru          7
d0dwv6jcszbqj          7

--//打开另外会话执行sqlplus -nologintime scott/btbtms@test01p,虽然不显示,实际上你可以发现是修改的.
SCOTT@test01p> select sql_id,executions from v$sql where sql_id in ('395829wtbubru','d0dwv6jcszbqj');
SQL_ID        EXECUTIONS
------------- ----------
395829wtbubru          8
d0dwv6jcszbqj          8

--//改用toad登录看看.
SCOTT@test01p> select sql_id,executions from v$sql where sql_id in ('395829wtbubru','d0dwv6jcszbqj');
SQL_ID        EXECUTIONS
------------- ----------
395829wtbubru          9
d0dwv6jcszbqj          9

--//可以发现执行次数也会增加,特别对以sql_id=d0dwv6jcszbqj的dml语句.
--//也就是讲这个可能导致大量争用.所以讲任何新特性都会付出代价.

--//再来看看使用共享模式登录的情况,由于pdb数据库没有配置共享连接模式,测试在cdb数据库下进行:

SYS@test> select con_id,sql_id,executions from v$sql where sql_id in ('395829wtbubru','d0dwv6jcszbqj') and con_id=1;
    CON_ID SQL_ID        EXECUTIONS
---------- ------------- ----------
         1 395829wtbubru          8
         1 d0dwv6jcszbqj          7
         1 d0dwv6jcszbqj          1

--//执行如下: sqlplus system/btbtms@127.0.0.1:1521/testxdb:shared
D:\tools\rlwrap>sqlplus system/btbtms@127.0.0.1:1521/testxdb:shared
SQL*Plus: Release 12.1.0.1.0 Production on Sat Jun 3 19:26:41 2017
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Last Successful login time: Sat Jun 03 2017 19:25:11 +08:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SYSTEM@127.0.0.1:1521/testxdb:shared> select saddr,sid,paddr,status,server from v$session where sid in (select sid from v$mystat);
SADDR                   SID PADDR            STATUS   SERVER
---------------- ---------- ---------------- -------- ---------
000007FF49D3EAF0        138 000007FF49A33528 ACTIVE   SHARED

SYS@test> select con_id,sql_id,executions from v$sql where sql_id in ('395829wtbubru','d0dwv6jcszbqj') and con_id=1;
    CON_ID SQL_ID        EXECUTIONS
---------- ------------- ----------
         1 395829wtbubru          9
         1 d0dwv6jcszbqj          8
         1 d0dwv6jcszbqj          1
--//你可以看到采用共享模式也一样.再次执行:sqlplus system/btbtms@127.0.0.1:1521/testxdb:shared

SYS@test> select con_id,sql_id,executions from v$sql where sql_id in ('395829wtbubru','d0dwv6jcszbqj') and con_id=1;
    CON_ID SQL_ID        EXECUTIONS
---------- ------------- ----------
         1 395829wtbubru         10
         1 d0dwv6jcszbqj          9
         1 d0dwv6jcszbqj          1

时间: 2024-09-28 15:36:12

2017060312C sqlplus显示用户上次登录时间的相关文章

JSP如何保存用户上次登录时间

js 代码是以Access库为例,日期对象使用的java.sql.Date()类型,因为据测试java.util.Date类型是不能添加到DateTime类型的字段中的: import java.sql.*;import java.text.*; /*** 代码*/ public class MSAccessDB  {  public static SimpleDateFormat sd=new SimpleDateFormat("MMM dd yyyy");  private Pre

php记录并显示用户上次登录的时间

创建脚本文件 form_login.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta htt

php使用cookie显示用户上次访问网站日期的方法_php技巧

本文实例讲述了php使用cookie显示用户上次访问网站日期的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <?php if(!empty($_COOKIE['lastvisit'])){//先判断,是否存在cookie  echo "您上次访问时间是:".$_COOKIE['lastvisit'];  setCookie("lastvisit",date("Y-m-d H:i:s"),time()+3600*24*

jsp中使用cookie显示上次登录时间

问题描述 jsp中使用cookie显示上次登录时间 显示结果: 当前的时间:Sat Dec 06 20:32:36 CST 2014 上次访问时间:FAC2291FFA5623F835BDCB6F1CAE51C6 代码: <% Cookie[] cookies= request.getCookies(); Cookie cookie_response = null; if(cookies!=null){ cookie_response=cookies[0]; } out.println("

关于jsp中利用cookie记录上次登录时间和IP的问题

问题描述 关于jsp中利用cookie记录上次登录时间和IP的问题 <% String IP = request.getRemoteAddr(); Cookie[] cookies = request.getCookies(); Cookie serverCookie=null; for(int i=0;i<cookies.length;i++) if(IP.equals(cookies[i].getName())){ serverCookie=cookies[i];} if(serverCo

SQLSERVER记录登录用户的登录时间(自写脚本)_MsSql

前一阵子经理问我能不能把用户最后一次登录我们的业务数据库的时间记录下来,因为之前有人修改过数据库sa用户的登录密码,所以我们要记录一下. 我查了一下资料,好像不能记录谁登录过业务库,只能记录谁登录过SQLSERVER 数据库版本是SQL2005 ,操作系统:Windows7 下面是本人写的一个脚本,我的实现原理是使用触发器,触发器是登录触发器,范围是整个服务器范围,如果有人登录过,就使用 bcp命令把登录信息记录日志文件 1.如果原来数据库已经存在触发器把他删掉 复制代码 代码如下: USE M

SQLSERVER记录登录用户的登录时间sql语句

bcp命令把登录信息记录日志文件 1.如果原来数据库已经存在触发器把他删掉  代码如下 复制代码 1 USE MASTER 2 GO 3 DROP TRIGGER trg_logon_attempttest ON ALL SERVER 4 GO2 .在D盘新建一个文本文件 d:Logondata.txt  这个文本文件用来记录登录信息 3.创建一个登录触发器审核登录事件  代码如下 复制代码 CREATE TRIGGER trg_logon_attempttest  ON ALL SERVER

SQLSERVER记录登录用户的登录时间(自写脚本)

前一阵子经理问我能不能把用户最后一次登录我们的业务数据库的时间记录下来,因为之前有人修改过数据库sa用户的登录密码,所以我们要记录一下. 我查了一下资料,好像不能记录谁登录过业务库,只能记录谁登录过SQLSERVER 数据库版本是SQL2005 ,操作系统:Windows7 下面是本人写的一个脚本,我的实现原理是使用触发器,触发器是登录触发器,范围是整个服务器范围,如果有人登录过,就使用 bcp命令把登录信息记录日志文件 1.如果原来数据库已经存在触发器把他删掉 复制代码 代码如下: USE M

JavaScript Cookie显示用户上次访问的时间和次数_javascript技巧

httml代码: 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">