博文说明【前言】:
本文将记录个人工作中常用的oracle配置命令及相关知识,在目前时间点【2017年5月16号】下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容。
正文:
1、cmd中执行sql脚本
sqlplus mcpdb/McPDBds00@10.133.200.230/cxydck1 @D:\浏览器下载-download\TS_COMPANY-副本.sql
上面这是在没有使用ora文件的情况下,如有ora文件,则10.133.200.230/cxydck1可以替换成自定义的名称
2、plsql中执行sql脚本
打开命令窗口-->@d:\database.sql 或者 start d:\database.sql
3、将unl文件数据导入oracle数据库
1、编辑sql.ctl文件,sql.ctl文件内容如下:
load data
infile 'C:\Users\Administrator\Desktop\移动查勘上线测试\2016-10-26-更新分公司用户数据库\prpdbankaccount.txt'
insert
into table ts_bankaccount_bak2
fields terminated by'#'
trailing nullcols
(
OPENBANKCODE,
OPENBANKNAME,
NAMECODE,
AREACODE,
USEFLAG
)
注意:文件中的“#”代表的是unl文件中以#为分隔符,如果文件中是以|作为分隔符,则需要将#替换成|,括号中的5个字段指的是对应的5个字段。
2、打开cmd,路径进入ctl和data.txt所在的路径,运行
sqlldr mcp31000000/mcp31000000@jspt control=sql.ctl log=log.log bad=bad.log errors=5000
rows=500 bindsize=1048576
注意:
rows与bindsize相关,rows默认64行,如果不修改bindsize,只修改rows无效。
bindsize --(每次提交记录的缓冲区的大小,字节为单位,默认256000)
4、AIX服务器上使用topas,查看时出现:Terminal linux is unknown
解决方法:export TERM=vt100 然后在CRT终端上修改将terminal修改为VT100,输出结果后可以再次修改回linux
5、查看RAC集群资源信息
# srvctl config database -d cxydck -a 【注意:-d后面接的是server_name】
6、查看RAC集群监听信息
# srvctl config listener -n ZB23YDCK1(主机名)
7、查看RAC集群连接信息
# srvctl config database -d cxydck -t
8、查看RAC集群实例状态【cxydck为server_name】
# srvctl status database -d cxydck -v
9、查看节点应用程序状态: srvctl status nodeapps
10、列出所配置的数据库名称:srvctl config database
11、列出所配置的数据库的详细信息:srvctl config database -d cxydck -a
12、查看ASM磁盘:srvctl status asm -a
13、查看listener:srvctl status listener
14、查看磁盘空间信息
进grid用户下进入asmcmd,然后lsdg查看磁盘组空间
15、修改数据库默认字符集
查看当前数据库的字符集
Sql> select userenv('language') from dual;
错误操作:
改服务器端字符集,通过ORACLE的SQL PLUS命令窗口改
在SQL*PLUS中,以DBA登录 conn 用户名 as sysdba
然后执行以下命令
>shutdown immediate; (把database停了,关闭数据库实例Instance)
>startup mount; (把database重开去可更改情況,实例装载数据库)
>alter system enablerestricted session;
>alter system set job_queue_processes=0;
>alter system setaq_tm_processes=0;
>alter database open; (Instance打开数据库)
>alter database characterset utf8;
OR
>alter database characterset internal_use utf8;(AL32UTF8)
>shutdown immediate;
>startup; (重开正常oracle)
注意:oracle修改字符集只能全局修改,不能只针对某一个用户进行修改,并且在建库的时候字符集是已经选好的,后期是不能被修改的。如果使用命令强制修改字符集,虽然在在表面,字符集是显示的被修改,但是实际上,数据库被不可逆的破坏了。
一般修改字符集的准确做法是新建实例,做迁移。也就是说上面这一种方法是错误的,正确的修改方法为:
16、死锁问题解决
一、数据库死锁的现象
程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。
二、死锁的原理
当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提
交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,
此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。
三、死锁的定位方法
通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。
1)用dba用户执行以下语句
select username,lockwait,status,machine,program from v$session where sid in
(select session_id fromv$locked_object)
如果有输出的结果,则说明有死锁,且能看到死锁的机器是哪一台。字段说明:
Username:死锁语句所用的数据库用户;
Lockwait:死锁的状态,如果有内容表示被死锁。
Status:状态,active表示被死锁
Machine:死锁语句所在的机器。
Program:产生死锁的语句主要来自哪个应用程序。
2)用dba用户执行以下语句,可以查看到被死锁的语句。
select sql_text from v$sqlwhere hash_value in
(select sql_hash_value fromv$session where sid in
(select session_id fromv$locked_object))
四、死锁的解决方法
一般情况下,只要将产生死锁的语句提交就可以了,但是在实际的执行过程中。用户可
能不知道产生死锁的语句是哪一句。可以将程序关闭并重新启动就可以了。
经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。
1)查找死锁的进程:
sqlplus "/assysdba" (sys/change_on_install)
SELECTs.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
FROM V$LOCKED_OBJECTl,V$SESSION S WHERE l.SESSION_ID=S.SID;
2)kill掉这个死锁的进程:
alter system kill session ‘sid,serial#’; (其中sid=l.session_id)
3)如果还不能解决:
select pro.spid fromv$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr;
其中sid用死锁的sid替换: exit
ps -ef|grep spid
其中spid是这个进程的进程号,kill掉这个Oracle进程
17、执行startup时,提示ORA-00845:MEMORY_TARGET not supported on this system
在重启oracle11G的时候出现这个错误,解决方法:
如上的内容就详细的解释了该错误是由于/dev/shm小于MEMORY_TARGET的大小,或者是/dev/shm根本就没有挂载,如果同时设置了MEMORY_TARGET和MENORY_MAX_TARGET,那么/dev/shm至少必须和MEMORY_MAX_TARGET的大小一致
因此在这里需要重新把这个目录进行挂载,在挂载的时候,添加内存参数,进入/etc/fstab文件
修改为:tmpfs /dev/shm tmpfs defaults,size=3G 0 0
[root@tp-oracle11g-1 ~]# df-h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 60G 18G 39G 31% /
tmpfs 1.9G 909M 1009M 48% /dev/shm
/dev/sda1 194M 32M 152M 18% /boot
/dev/sda5 36G 177M 34G 1% /home
/dev/sr0 4.1G 4.1G 0 100% /media
提示无法umount的时候使用 fuser -km /dev/shm/ 然后再umount
重新挂载之后的状态:
[root@tp-oracle11g-1 ~]# df-h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 60G 18G 39G 31% /
/dev/sda1 194M 32M 152M 18% /boot
/dev/sda5 36G 177M 34G 1% /home
/dev/sr0 4.1G 4.1G 0 100% /media
tmpfs 3.0G 0 3.0G 0% /dev/shm
然后:
SQL> startup;
ORACLE instance started.
Total System Global Area1603411968 bytes
Fixed Size 2213776 bytes
Variable Size 939526256 bytes
Database Buffers 654311424 bytes
Redo Buffers 7360512 bytes
Database mounted.
Database opened.
然后重新挂载,如果在卸载umount /dev/shm的时候失败,无法卸载,那么输入:fuser–km /dev/shm,
然后再重新挂载mount –a
结尾:
感谢阅读,祝有收获的一天,谢谢!
本文转自1清风揽月1 51CTO博客,原文链接:http://blog.51cto.com/watchmen/1926634,如需转载请自行联系原作者