1、安装oracle问题
(1)、oracle启动慢问题描述:
在虚拟机上的redhat利用sqlplus /nolog---->connect / as sysdba---->startup启动oracle很慢和利用lsnrctl start启动监听服务很慢,会导致在windows上pl/sql连接很慢或者出现连接超时的问题。
解决办法:
①、注释掉/ect/resolv.conf中的nameserver那行(原因是:每次连接数据库,都需要进行DNS查询,但由于DNS服务器不可达(内网),所以等到超时时才返回,导致连接库慢)。
②、监听服务启动慢有可能是监听日志太大,把监听日志listener.log文件备份再删除掉即可。具体做法:用find / -name listener.log找到其路径,进入listener.log上级目录,执行mv listener.log listener.log_bak进行备份,再执行rm -f listener.log删除日志。
(2)、centOS7安装oracle11g r2出错:
①、不出现图形化界面
解决办法:
以root登录,执行xhost + ,然后重新开一个oracle窗口在 /home/oracle/database目录下执行./runInstaller
②、在安装到68%时提示错误,例如:
Error in invoking target ‘install’ of makefile ’
/u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk’. See ’
/u01/app/oraInventory/logs/installActions2015-01-22_09-39-03AM.log’ for details.
原因是:glibc的版本2.17过高所致(高于2.14)
解决办法:
下载glibc-static-2.17-55.el7.x86_64.rpm 然后通过ftp上传到centOS7上,用yum install glibc-static-2.17-55.el7.x86_64.rpm 命令进行安装,该软件包包含一个静态链接库:/usr/lib64/libc.a
修改/u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk,将
ctxhx: $(CTXHXOBJ)
$(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK)
修改为:
ctxhx: $(CTXHXOBJ)
-static $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK) /usr/lib64/libc.a
点击Retry继续安装。接着又提示”Error in invoking target ‘agent nmhs’ of makefile ‘/u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk.’ ,解决方法:在makefile中添加链接libnnz11库的参数
修改/u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk,将
$(MK_EMAGENT_NMECTL) 修改为:$ (MK_EMAGENT_NMECTL) -lnnz11
点击Retry继续安装。
安装成功!
2、 oracle数据及语句
(1)、出现死锁问题
用dba用户执行以下语句,可以查看到被死锁的语句
select sql_text from v$sql where hash_value in
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object))
(2)、oracle批量插入表数据脚本:
例子:
DECLARE
i number;
begin
i := 0;
while i < 100 loop
insert into tb_queue (phone, msg) values (‘13557042111’+i,‘100测试’);
i := i + 1;
end loop;
commit;
end;
引入:sqlserver批量插入脚本
declare @i varchar
set @i=0
while @i<10
begin
insert into tb_queue (phone, msg) values (‘1891234567’+@i,‘优先级测试’);
set @i=@i+1
end
(3)、在已有表添加字段,若字段不存在,则添加,已存在,则不进行操作;删除字段,若存在字段,则删除,不存在,则不进行操作。
新增:
-- LF_SYSUSER表新增FRIST_LOGIN_P1字段
DECLARE
ISEXIST INTEGER;
BEGIN
SELECT COUNT(1) INTO ISEXIST FROM USER_TAB_COLUMNS
WHERE TABLE_NAME=UPPER('LF_SYSUSER')
AND COLUMN_NAME=UPPER('FRIST_LOGIN_P1');
IF ISEXIST = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE LF_SYSUSER ADD (FRIST_LOGIN_P1 NUMBER(1) DEFAULT 0 NOT NULL)';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN LF_SYSUSER.FRIST_LOGIN_P1 IS ''操作员是否第一次登录,默认0是,1不是''';
END IF;
END;
删除:
-- LF_SYSUSER表删除FRIST_LOGIN_P1字段
DECLARE
ISEXIST INTEGER;
BEGIN
SELECT COUNT(1) INTO ISEXIST FROM USER_TAB_COLUMNS
WHERE TABLE_NAME=UPPER('LF_SYSUSER')
AND COLUMN_NAME=UPPER('FRIST_LOGIN_P1');
IF ISEXIST =1 THEN
EXECUTE IMMEDIATE 'ALTER TABLE LF_SYSUSER DROP COLUMN FRIST_LOGIN_P1';
END IF;
END;
注意: EXECUTE IMMEDIATE内的sql语句不可以存在分号(;)