oracle相关笔记

本文档记录了在虚拟机上安装Oracle时遇到的启动慢和安装错误问题及其解决办法,包括DNS配置调整、监听日志清理、CentOS7安装Oracle11g的图形化界面缺失和依赖库冲突问题。同时,还介绍了Oracle数据库的死锁检测、批量插入数据的PL/SQL脚本以及如何在已有的表中动态添加或删除字段的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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语句不可以存在分号(;)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值