arm架构 麒麟系统,linux环境安装Oracle Instant Client

$ wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linux-arm64.zip
$ unzip instantclient-basic-linux-arm64.zip

$ wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-sqlplus-linux-arm64.zip
$ unzip instantclient-sqlplus-linux-arm64.zip
wget https://download.oracle.com/otn_software/linux/instantclient/1922000/instantclient-sdk-linux.arm64-19.22.0.0.0dbru.zip unzip instantclient-sdk-linux.arm64-19.22.0.0.0dbru.zip  $ export LD_LIBRARY_PATH=$(pwd)/instantclient_19_10

  

/opt/oracle

上面的export改成实际的路径,下面是例子

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
#/opt/oracle/instantclient_19_22

export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_22

最后两行是我添加的。

执行命令source  ~/.bashrc  。然后在后面的文件夹里面运行sqlplus -v 你就可以看到信息了。

cp sqlplus /usr/local/bin/ 这样所有的文件夹都可以访问了

因为我的是7.4版本,所以选择最后一个。

The OCI8 extension lets you access Oracle Database.

Use 'pecl install oci8' to install for PHP 8.2.

Use 'pecl install oci8-3.2.1' to install for PHP 8.1.

Use 'pecl install oci8-3.0.1' to install for PHP 8.0.

Use 'pecl install oci8-2.2.0' to install for PHP 7.

报错

configure: error: Cannot find php-config. Please use --with-php-config=PATH
ERROR: `/tmp/pear/temp/oci8/configure --with-php-config=/usr/local/php/bin/php-config --with-oci8=./configure --with-php-config=/usr/bin/php-config7.4 --with-oci8=instantclient,/opt/oracle/instantclient_19_22' failed

  

确认 PHP 开发包是否已安装:
yum list installed | grep php-devel
如果未安装,您可以使用相应的命令来安装它。
sudo yum install php-devel
which php-config

 上面的报错,只有我安装了sdk才解决。

重新运行

pecl install oci8-2.2.0

Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] : instantclient,/opt/oracle/instantclient_19_22

 显示安装成功。

Build process completed successfully
Installing '/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/oci8.so'
install ok: channel://pecl.php.net/oci8-2.2.0
Extension oci8 enabled in php.ini

访问这个链接受到启发https://ubuntuforums.org/archive/index.php/t-92528.html

后面 安装pdo_oci

composer require topthink/think-oracle=v2.1

配置php.ini扩展

 vim /usr/local/php/etc/php.ini

extension=pdo_oci.so

 官网已停用,改装别的

https://gitee.com/jianswu/think-oracle?_from=gitee_search#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95

# think-oracle
用于 thinkphp6 框架上的基于 OCI 的 Oracle 数据库驱动。

由于官方很久没有对 PDO_OCI 更新了,其驱动源码默认不支持 Oracle 11g 及以上版本的数据库,当然也可在编译前修改 config.m4 文件使之支持。但安装之后,PDO_OCI 使用中却存在问题,如果数据库中存储中文,查询后会出现字符截断,无法得到预期的结果。

本库使用基于 OCI API 封装的 PDO 接口数据库驱动 [misuoka\ocipdo](https://github.com/misuoka/ocipdo),用来对 Oracle 数据库进行操作。

根据 Oracle 数据库的特性,对 thinkphp6 的数据库访问层进行稍作修改,使之适用于 Oracle 数据库,以便在 thinkphp6 框架中以其原有方式完美操作 Oracle 数据库。如果你使用的是 thinkphp5.1 框架,请安装 1.x.x 版本。

> 有关 PDO_OCI 字符截断问题的链接:https://my.oschina.net/startphp/blog/195333

## 使用方法

使用 composer 进行安装 `composer require misuoka/think-oracle`

安装完成后,在 thinkphp6 的数据库配置文件 database.php 中,进行如下配置:

```php
$config = [
    // 数据库连接配置信息
    'connections'     => [
        'oracle' => [
            // 数据库类型
            'type'            => '\misuoka\think\Oracle',
            // 服务器地址
            'hostname'        => '', // 填写数据库 IP 地址
            // 数据库名
            'database'        => '', // 数据库实例 SID 名称,如 ORCL
            // 用户名
            'username'        => '', // 用户名
            // 密码
            'password'        => '', // 密码
            // 端口
            'hostport'        => '', // 端口号,如 1521
            // 数据库连接参数
            'params'          => [],
            // 数据库编码默认采用utf8
            'charset'         => 'utf8',
            // 数据库表前缀
            'prefix'          => '',
            // 自增序列名前缀(新增的,针对 Oracle 特有的),除前缀外,名称与表名一致。如果不是,请在新增数据时使用 sequence 方法设置序列
            'prefix_sequence' => '',
        ],
    ],
];
```

配置完成后,即可在PHP业务代码中,按 thinkphp6 官方开发手册的方法使用。

## 变更之处

- 由官方的 PDO 驱动连接变更为 [misuoka\ocipdo](https://github.com/misuoka/ocipdo) 驱动连接
- 更改对 Oracle 存储过程调用的判断
- 获取 LastInserID 的修改
    - 增加了序列名的自动获取,如果用户配置了序列前缀,则根据规则(序列前缀 + 去掉表前缀的表名)自动获取序列名称,如果存在则返回序列名
    - 如果用户查询设置了返回自增ID,但又不显示填写序列名并且自动获取序列名失败,则结果返回 -1 
- 去掉 REPLACE 功能,Oracle 没有该用法
- 修改 insertAll 方法,使之适用于 Oracle 的批量插入
- 对数据表及字段都转大写后加`"`,避免遇到系统关键字,导致 SQL 处理错误。如:用户ID为UID,如果删除时(`DELETE TB_USER WHERE UID < 100`)UID不加上双引号,这会导致全部数据被删除,经过处理后的语句(`DELETE "TB_USER" WHERE "UID" < 100`)只会删除 UID 小于100的数据。


## thinkphp5.1 上安装方式

使用 composer 进行安装 `composer require misuoka/think-oracle 1.x`  提示没有json 

查看当前扩展,确认是否是缺少json扩展,执行


php -m

查看当前扩展,发现的真的没有json扩展,于是先安装缺失扩展,再下载composer.phar


yum install php-json
安装完成后,在 thinkphp6 的数据库配置文件 database.php 中,进行如下配置: ```php $config = [ // 数据库类型 'type' => '\misuoka\think\Oracle', // Query类 'query' => '\misuoka\think\Query', // 如果是在 database.php 中配置,不需要填写此项,但如果是这种用法 Db::connect($config),请填写此项 // 服务器地址 'hostname' => '', // 填写数据库 IP 地址 // 数据库名 'database' => '', // 数据库实例名称,如 ORCL // 用户名 'username' => '', // 用户名 // 密码 'password' => '', // 密码 // 端口 'hostport' => '', // 端口号,如 1521 // 连接dsn 'dsn' => '', // 不填写,如果填写,则数据库连接将以此为连接串,将忽略除账号密码外的参数 // 数据库连接参数 'params' => [], // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => '', // 自增序列名前缀(新增的,针对 Oracle 特有的),除前缀外,名称与表名一致。如果不是,请在新增数据时使用 sequence 设置序列 'prefix_sequence' => '', ]; ``` 配置完成后,即可在PHP业务代码中,按 thinkphp5.1 官方开发手册的方法使用。

 安装完以后要lnmp 重启下。

posted @ 2024-02-22 16:58  @菜鸟爱学习@  阅读(612)  评论(0编辑  收藏  举报