oracle_setup

本文主要介绍了 Oracle 9i 安装过程中遇到的问题及解决办法。包括内核参数设置过高导致的错误、未安装补丁引发的初始化错误、设置 DISPLAY 环境变量出现的异常,还提及界面乱码问题,通过相应操作可解决这些问题完成安装。

境就已经生效了.注:一定要推出后重登陆,否则不会生效!

注意,如果内核参数设置过高,即设置为实际内核 export LD_ASSUME_KERNEL=2.4.22就会出现以下错误:/

opt/oracle/jre/1.1.8/bin/../lib/i686/green_threads/libzip.so: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference (libzip.so) Unable to initialize threads: cannot find class java/lang/Thread         Could not create Java VM

造成不能安装 OEM,net configure 等组件

     10)安装补丁

$ cd /home/ora9i /3006854

$ chmod +x  rhe13_pre_install.sh
$ sh rhe13_pre_install.sh
Applying patch...
Patch successfully applied

这里很重要,一定要成功,否则就无法安装,会出现下面的错误。如果执行时报错:gcc找不到,则进行上面设置编译器的步骤。我设了反而出错了! :(
      注意:如果没有安装补丁,安装时会出现如下的错误信息:

Initializing Java Virtual Machine from /tmp/OraInstall2005-01-18_06-01-55PM/jre/bin/java. Please wait...  
Error occurred during initialization of VM  
Unable to load native library: /tmp/OraInstall2005-01-18_06-01-55PM/jre/lib/i386/libjava.so: symbol __libc_wait, version GLIBC_2.0 not defined in file libc.so.6 with link time reference

      11) 以oracle用户安装Oracle

$ cd /mnt/oracle/Disk1

$./runInstaller
Initializing Java Virtual Machine from /tmp/OraInstall2005-11-09_07-21-54PM/jre/bin/java. Please wait...
  如果以上步骤设置了DISPLAY的环境变量,而且安装界面也已出现,那么祝贺你,你安装Oracle9i已基本不会有问题了。但是我设置了以后就出现了如下的错误,导致无法继续安装:
   Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using '127.0.0.1:0.0' as the value of the DISPLAY      variable.
        at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
        at sun.awt.X11GraphicsEnvironment.(X11GraphicsEnvironment.java:59)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:120)
        at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:58)
        at java.awt.Window.(Window.java:188)
        at java.awt.Frame.(Frame.java:315)
        at java.awt.Frame.(Frame.java:262)
        at oracle.sysman.oii.oiic.OiicInstaller.main(OiicInstaller.java:593)

  我在网上查了一下,原因可能是由于JDK的版本过老,在使用AWT时的一个属性出了问题。可以使用如下方法解决:
    如果你设置了环境变量DISPLAY,请先到/home/oracle/.bash_profile中把DISPLAY删掉,然后打开一个新的终端(注:必须是图形界面下的Koncole,如果在文字界面下将不成功),以root登陆,输入如下命令:
     #xhost +
  如果成功,会输出其他用户可以连接此窗口的结果。
  然后在另外一个终端中以oracle登陆,执行命令:
     $./runInstaller
  网上几乎所有的文章都是使用设置环境变量DISPLAY的方法来安装了,但是这里就是不行,这也是困扰我很久的主要问题!  好了,你现在应该能看到安装的界面了吧!
  可是界面上怎么都是“方框”的乱码呢?呵呵,那是因为语言、字体设置的问题,退出安装,先设置一下环境变量:
   $ export LC_ALL=C
   $ ./runInstaller
  这下好了吧,现在可以方便的进行安装了,应该不会再出现什么问题了!
  在安装过程中需要以root来执行两次sh脚本,根据它的提示做就可以了。
12) 终于安装成功了,现在可以建立你的数据库了!
作者: MAGIC33

import os import sys import platform import cx_Oracle import zipfile import requests import shutil import logging from pathlib import Path # 配置日志记录 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger('oracle_setup') def setup_oracle_client(): """ 自动检测并设置Oracle客户端环境(权限问题修复版) """ # 1. 首先尝试使用现有的ORACLE_HOME oracle_home = os.environ.get('ORACLE_HOME') if oracle_home and os.path.exists(oracle_home): try: logger.info(f"尝试使用现有的ORACLE_HOME: {oracle_home}") cx_Oracle.init_oracle_client(lib_dir=oracle_home) return True except Exception as e: logger.error(f"使用现有Oracle客户端失败: {str(e)}") # 2. 确定持久化存储目录(避免权限问题) base_dir = Path.home() / "oracle_client" # 使用用户主目录避免权限问题 os.makedirs(base_dir, exist_ok=True) # 3. 检查是否已存在客户端安装 client_dir = next((d for d in base_dir.iterdir() if d.is_dir() and d.name.startswith("instantclient_")), None) if client_dir and client_dir.exists(): try: actual_path = str(client_dir.resolve()) logger.info(f"使用已存在的Oracle客户端: {actual_path}") cx_Oracle.init_oracle_client(lib_dir=actual_path) os.environ['ORACLE_HOME'] = actual_path return True except Exception as e: logger.error(f"使用现有客户端失败: {str(e)}") # 移除无效安装 shutil.rmtree(client_dir, ignore_errors=True) # 4. 下载并安装新客户端 logger.info("开始下载Oracle Instant Client...") try: system = platform.system().lower() arch = "64bit" if platform.architecture()[0] == "64bit" else "32bit" # 动态构建下载URL base_url = "https://download.oracle.com/otn_software" if system == "windows": url = f"{base_url}/nt/instantclient/instantclient-basiclite-windows.zip" elif system == "linux": url = f"{base_url}/linux/instantclient/instantclient-basiclite-linux{'x64' if arch == '64bit' else ''}.zip" else: # macOS url = f"{base_url}/mac/instantclient/instantclient-basiclite-macos.zip" logger.info(f"下载URL: {url}") # 流式下载 zip_path = base_dir / "oracle_client_temp.zip" with requests.get(url, stream=True, timeout=30) as r: r.raise_for_status() with open(zip_path, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) # 解压文件 logger.info(f"解压到: {base_dir}") with zipfile.ZipFile(zip_path, 'r') as zip_ref: zip_ref.extractall(base_dir) # 清理zip文件 zip_path.unlink() # 查找解压目录 client_dir = next(d for d in base_dir.iterdir() if d.is_dir() and d.name.startswith("instantclient_")) actual_path = str(client_dir.resolve()) # 设置环境变量 os.environ['ORACLE_HOME'] = actual_path if system == "windows": os.environ['PATH'] = f"{actual_path};{os.environ['PATH']}" else: os.environ['LD_LIBRARY_PATH'] = f"{actual_path}:{os.environ.get('LD_LIBRARY_PATH', '')}" # 初始化客户端 cx_Oracle.init_oracle_client(lib_dir=actual_path) logger.info("Oracle客户端配置成功!") return True except Exception as e: logger.error(f"客户端安装失败: {str(e)}") # 清理临时文件 if zip_path.exists(): zip_path.unlink(missing_ok=True) return False def test_oracle_connection(host="192.168.1.1", port=1521, service_name="UALC", user="admin", password="admin"): """测试Oracle数据库连接""" try: dsn = cx_Oracle.makedsn(host, port, service_name=service_name) with cx_Oracle.connect(user=user, password=password, dsn=dsn) as conn: with conn.cursor() as cursor: cursor.execute("SELECT '连接成功!' FROM DUAL") result = cursor.fetchone() logger.info(f"数据库连接测试成功: {result[0]}") return True except cx_Oracle.DatabaseError as e: logger.error(f"数据库错误: {e}") except Exception as e: logger.error(f"连接测试失败: {str(e)}") return False if __name__ == "__main__": logger.info("=" * 50) logger.info("开始Oracle客户端自动配置") # 配置客户端 if setup_oracle_client(): logger.info("客户端配置完成,开始测试连接...") # 使用实际连接参数替换示例参数 if test_oracle_connection( host="192.168.154.6", port=1521, service_name="UALC", user="toyota", password="HISTORY" ): logger.info("Oracle客户端和连接测试全部成功!") else: logger.error("连接测试失败,请检查数据库配置") else: logger.error("客户端配置失败,请检查日志") logger.info("=" * 50) oracle版本11.2
最新发布
10-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值