2024年软件测试最新查看Oracle当前用户下的信息_oracle 用户名下的数据名(1),相关资料参考

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

20 rows selected.

SQL>


**来源于props$,是表示数据库的字符集。**


\*\*2、如何查询dmp文件的字符集 \*\*  
 用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有 几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:



SQL> select nls_charset_name(to_number(‘0354’,‘xxxx’)) from dual;

NLS_CHARSET_NAME(TO_NUMBER(‘0354’,‘XXXX’

ZHS16GBK

SQL>


如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):



#cat exp.dmp | od -x | head -1 | awk ‘{print $2 $3}’ | cut -c 3-6


然后用上述SQL语句也可以得到它对应的字符集。


注意:使用exp/imp 导入导出时是需要设定字符集的,因为它是一个客户端工具。生成的dmp文件根据客户端的字符集来定(如果你没有设置的话),这样如果导出源客户端和目标端数据库字符集不一致,imp导入就会出现乱码;而expdp/impdp工具是不依赖NLS\_LANG的,它是基于源端和目标端NLS\_CHARACTERSET。  
 **3、查询oracle client端的字符集**  
 在windows平台下,就是注册表里面相应OracleHome的NLS\_LANG。还可以在dos窗口里面自己设置,比如:



set nls_lang=AMERICAN_AMERICA.ZHS16GBK


这样就只影响这个窗口里面的环境变量。  
 在unix平台下,就是环境变量NLS\_LANG。



$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK


如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。  
 \*\*4、修改oracle的字符集 \*\*  
 一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符集的转 换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受oracle支持的。对数据库server而 言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来 说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说明,我们最常用的两种字符集ZHS16GBK和 ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支持。


\*\*修改server端字符集(不建议使用) \*\*  
 在oracle 8之前,可以用直接修改数据字典表props 
 
 
 
 
 来 
 
 
 改 
 
 
 变 
 
 
 数 
 
 
 据 
 
 
 库 
 
 
 的 
 
 
 字 
 
 
 符 
 
 
 集 
 
 
 。 
 
 
 但 
 
 
 o 
 
 
 r 
 
 
 a 
 
 
 c 
 
 
 l 
 
 
 e 
 
 
 8 
 
 
 之 
 
 
 后 
 
 
 , 
 
 
 至 
 
 
 少 
 
 
 有 
 
 
 三 
 
 
 张 
 
 
 系 
 
 
 统 
 
 
 表 
 
 
 记 
 
 
 录 
 
 
 了 
 
 
 数 
 
 
 据 
 
 
 库 
 
 
 字 
 
 
 符 
 
 
 集 
 
 
 的 
 
 
 信 
 
 
 息 
 
 
 , 
 
 
 只 
 
 
 改 
 
 
 p 
 
 
 r 
 
 
 o 
 
 
 p 
 
 
 s 
 
 
 
 来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props 
 
 
 来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props表并不完全,可能引起严重的后果。正确的修改方法如下:



$sqlplus /nolog
SQL>conn / as sysdba;   #若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP


\*\*注意:\*\*如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,不然不能startup) 按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’ 这样的提示信息 要解决这个问题有两种方法,一个是,利用INTERNAL\_USE 关键字修改区域设置, 还有一个是利用re-create,但是re-create有点复杂,所以请用internal\_use。



SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP MOUNT EXCLUSIVE;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
SQL>SHUTDOWN immediate;
SQL>startup;


如果按上面的做法做,National charset的区域设置就没有问题


\*\*修改dmp文件字符集 \*\*  
 上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅 是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如 US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。


具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。


比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:



SQL> select to_char(nls_charset_id(‘ZHS16GBK’), ‘xxxx’) from dual;

TO_CH

354

SQL>


然后将dmp文件的2、3字节修改为0354即可。  
 如果dmp文件很大,用ue无法打开,就需要用程序的方法了。


## Oracle 数据库查看client的用户登录信息包括ip


通过创建触发器对用户登录进行日志记录,对登录用户进行相关审计,记录登录用户,主机,系统用户及IP地址:


**1. 在sys模式下创建一个表,用于记录客户端登录数据库服务器的详细信息。**



create table login_history
(
username varchar2(60), --用户名
machine varchar2(60), --机器名
login_time date, --登录时间
ip varchar2(50) --ip地址
);
或者
SQL> create table LOGON_TABLE as
select sysdate logon_time,
sys_context(‘USERENV’,‘SESSION_USER’) username,
sys_context(‘USERENV’,‘HOST’) host,
sys_context(‘USERENV’,‘OS_USER’) os_user,
sys_context(‘USERENV’,‘IP_ADDRESS’) ip_address
from dual
/

Table created.


**2. 在sys模式下创建一个触发器。**



create or replace trigger login_log
after logon on database
begin
insert into login_history
select username, machine, sysdate, sys_context(‘userenv’, ‘ip_address’)
from v$session
where audsid = userenv(‘sessionid’);
commit;
end;
或者
SQL> create or replace trigger tri_logon after logon on database
begin
insert into LOGON_TABLE
( logon_time,
username,
host,
os_user,
ip_address
)
values
( sysdate,
sys_context(‘USERENV’, ‘SESSION_USER’),
sys_context(‘USERENV’,‘HOST’),
sys_context(‘USERENV’,‘OS_USER’),
sys_context(‘USERENV’,‘IP_ADDRESS’));
end;
/

Trigger created.


**3. 一些查看session数的实例(以sys用户登录)**



–查看login_history表
select * from login_history;

–查看当前的所有session数
select count(*) from v$session;

–查看当前的客户端计算机名为RHEL的所有session数
select count(*) from v$session where machine = ‘RHEL’;

–查看当前的各个客户端计算机的连接数
select count(*) , machine from v$session group by machine;


**4. 查看当前会话的ip**



select sys_context(‘userenv’,‘ip_address’) from dual;


## 扩展


## oracle密码过期策略


自从上次由于时钟跳变,造成Oracle数据库宕机,我对这个用户的业务系统一直满怀一颗敬畏之心  
 远程上去看日志,还好,提示是Oracle的密码过期了  
 从Oracle 10g开始,密码默认是180天过期


解决方法,输入下面两行,将过期时间设置为“无限制”



alter profile default limit password_life_time unlimited;

commit;


注意 :**vMware的vCenter虚拟机也有类似的设置,root密码默认90过期**



![img](https://img-blog.csdnimg.cn/img_convert/27baf585657d034e430f037eb465cd9a.png)
![img](https://img-blog.csdnimg.cn/img_convert/bf76a7d6077a474d6380a0e880c4330b.png)
![img](https://img-blog.csdnimg.cn/img_convert/5c1f0f042cd2a78bbce7ddb792c7e88a.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618608311)**

e_time unlimited;

commit;

注意 :vMware的vCenter虚拟机也有类似的设置,root密码默认90过期

[外链图片转存中…(img-7SI2a9ZQ-1715047987164)]
[外链图片转存中…(img-ao8xcOJx-1715047987164)]
[外链图片转存中…(img-thKkqS5d-1715047987165)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值