centos7安装Oracle 11g数据库

目录

一、安装前准备

1、安装前置工具(安装过可以忽略)

[root@server01 ~]# yum -y install yum-utils net-tools wget vim unzip lrzsz

2、更配yum源

2.1、备份原有源;
[root@server01 ~]# mkdir /etc/yum.repo-bak

[root@server01 ~]# mv /etc/yum.repos.d/* /etc/yum.repo-bak
2.2、下载阿里云base源和epel源;
[root@server01 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@server01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2.3、清理yum缓存
[root@server01 ~]# yum clean all
2.4、生成新的缓存
[root@server01 ~]# yum makecache

此处可能会遇到错误:

"Could not resolve host: mirrors.aliyun.com;未知的错误"

解决方法:

修改配置文件添加nameserver地址,重新执行生成缓存

[root@server01 ~]# vi /etc/resolv.conf

nameserver 8.8.8.8

nameserver 114.114.114.114
2.5、更新系统中所有软件到最新版(按需谨慎操作)
[root@server01 ~]# yum -y update

3 修改主机名: oracle配置文件中需要

[root@localhost oracle]# hostname
localhost.localdomain
[root@localhost oracle]# hostnamectl set-hostname szkj.member.s01
[root@localhost oracle]# systemctl restart network
[root@localhost oracle]# source /etc/profile
[root@localhost oracle]# hostname
szkj.member.s01
[root@localhost oracle]# 

4、配置网络 : 非必要

4.1、修改网络配置文件,设置静态IP。

[root@server01 ~]# cd /etc/sysconfig/network-scripts/

[root@server01 ~]# vi ifcfg-ens32

[root@server01 ~]# systemctl restart network

4.2、重启网络服务后,可使用下面的命令查询当前IP地址是否修改成功。

[root@server01 ~]# ifconfig

[root@server01 ~]# ip addr show

[root@server01 ~]# hostname --I

5、配置hosts文件

[root@server01 ~]# vi /etc/hosts

5、关闭防火墙

二、系统环境准备

1. 检测是否符合安装Oracle 11g的环境需求(2核CPU 、2G内存、8G的硬盘空间)

1.1 查看cpu详细信息:lscpu
1.2 查看内存详细信息: free -h
1.3 查看存储盘详细信息 : lsblk
1.4确保服务器能访问外网:ping baidu.com

2. 检测是否已安装Oracle

2.1查看是否有Oracle的进程:
2.2检查是否有Oracle用户 : id oracle

3. 创建用户组

3.1建立oracle用户和用户组

# 创建oninstall用户组:

groupadd oninstall

# 创建dba用户组:
groupadd dba

创建主用户组为oninstall 附加组为dba和oper用户组的oracle用户:

useradd -g oninstall -G dba oracle

passwd oracle   # 'ltkj.com'
或 echo "ltkj.com" | passwd --stdin oracle

4. 创建安装目录:

[root@server01 ~]# mkdir -p /data/db/oracle/product/11.2.0/dbhome_1

[root@server01 ~]# mkdir /data/db/oracle/{oradata,inventory,fast_recovery_area}

5. 修改目录权限:

[root@server01 ~]# chown -R oracle:oninstall  /data/db/oracle

[root@server01 ~]# chmod -R 775  /data/db/oracle

三、安装依赖包

[root@server01 ~]# yum -y install gcc gcc-c++ make binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static glibc glibc-common glibc-devel ksh libaio libaio-devel libgcc libstdc++ numactl-devel sysstat unixODBC unixODBC-devel kernel-headers pcre-devel readline rlwrap

如果提示有包没有找到,可以单独进行下载,上传至服务器,使用命令rpm --ivh进行安装。

四、下载Oracle11g安装包

1、在Oracle官方网站下载 Oracle database 11g 的安装包

https://edelivery.oracle.com/osdc/faces/SoftwareDelivery;jsessionid=NuAH5JL9Du6Cc7McbCYsS8W8oMNqhLE6o1l7bdONyEEaauT71Wp_!83811957

或 百度网盘

2、创建/data/u01/software目录

[root@server01 ~]# mkdir -p /usr/local/soft/oracle

3、上传安装包到目录下,解压

rz

 [root@localhost oracle]# cd /usr/local/soft/oracle

[root@localhost oracle]# unzip p10404530_112030_Linux-x86-64_1of7.zip 

 [root@localhost oracle]# unzip p10404530_112030_Linux-x86-64_2of7.zip

五、静默安装Oracle11G数据库

1、修改内核配置文件

[root@localhost oracle]# vim /etc/sysctl.conf

在尾部添加下面配置:

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 1073741824
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

使配置文件生效:

[root@localhost oracle]# sysctl -p

2、修改用户限制

[root@localhost oracle]# vim /etc/security/limits.conf

添加下面内容:

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240

3、修改/etc/pam.d/login 文件

[root@localhost oracle]# vim /etc/pam.d/login

添加下面内容:

session required /lib64/security/pam_limits.so
session required pam_limits.so

4、修改环境变量

[root@server01 ~]# vim /etc/profile

添加下面内容:

if [ $USER = "oracle" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
        ulimit -p 16384
        ulimit -n 65536
    else
        ulimit -u 16384
        ulimit -n 65536
    fi
fi

环境变量生效:

[root@localhost oracle]# source /etc/profile

5、设置oracle用户环境变量

5.1、切换oracle用户
[root@localhost oracle]# su - oracle
密码:
上一次登录:三 8月 14 10:14:23 CST 2024pts/0 上
[oracle@localhost ~]$ 
5.2、编辑配置文件
[oracle@localhost ~]$ vim .bash_profile 

添加下面内容:

 export ORACLE_BASE=/data/db/oracle
 export ORACLE_HOME=/data/db/oracle/product/11.2.0/dbhome_1
 export ORACLE_SID=orcl
 export ORACLE_PID=ora11g
 export ORACLE_UNQNAME=$ORACLE_SID
 export PATH=$ORACLE_HOME/bin:$PATH
 export NLS_LANG=american_america.AL32UTF8
 alias sqlplus='rlwrap sqlplus'
 alias rman='rlwrap rman'
5.3、使配置生效:
[oracle@localhost ~]$ source .bash_profile 

6、修改静默安装响应文件

6.1、复制一份响应文件:

[oracle@localhost ~]$ cp -R /usr/local/soft/oracle/database/response/ /home/oracle

[oracle@localhost ~]$ ll

总用量 0

drwxr-xr-x. 2 oracle oninstall 61 8月 14 10:23 response

[oracle@localhost ~]$

[oracle@localhost ~]$ cd response/

6.2、修改响应文件

[oracle@localhost response]$ vim db_install.rsp

修改文件中内容:

29 oracle.install.option=INSTALL_DB_SWONLY

37 ORACLE_HOSTNAME=szkj.member.s01

42 UNIX_GROUP_NAME=oninstall

47 INVENTORY_LOCATION=/data/db/oracle/inventory


86 SELECTED_LANGUAGES=en,zh_CN

91 ORACLE_HOME=/data/db/oracle/product/11.2.0/dbhome_1

96 ORACLE_BASE=/data/db/oracle

107 oracle.install.db.InstallEdition=EE


154 oracle.install.db.DBA_GROUP=dba

160 oracle.install.db.OPER_GROUP=dba

400 DECLINE_SECURITY_UPDATES=true
6.3、修改完成,保存退出。

7、执行安装

7.1、切换到解压的安装包目录:
[oracle@localhost response]$ cd /usr/local/soft/oracle/database
7.2、执行安装命令:
[oracle@localhost database]$ ./runInstaller -silent -force -responseFile /home/oracle/response/db_install.rsp -ignorePrereq

安装过程大概几分钟,如果服务器配置低可能会久一些;

7.3、安装过程中可以再开启一个终端,使用命令查看实时安装日志
[root@localhost database]# tail -f /data/db/oracle/inventory/logs/installActions2024-08-14_01-30-47PM.log
7.4、当出现如下信息时,需要再开启一个终端,以root用户执行这两个脚本。
[root@localhost database]# sh /data/db/oracle/inventory/orainstRoot.sh 

[root@localhost database]# sh /data/db/oracle/product/11.2.0/dbhome_1/root.sh
7.5、脚本执行完成后,再回到oracle安装的终端界面,回车。此时显示"Successfully Setup Software."则Oracle已经安装完成。
7.6、使用sqlplus登录验证,成功登录。
[oracle@localhost database]$ sqlplus / as sysdba

六、创建数据库实例

1、修改响应配置文件:

[oracle@localhost database]$ vim /home/oracle/response/dbca.rsp

修改如下内容:

78 GDBNAME = "orcl"

170 SID = "orcl"

 211 SYSPASSWORD = "orcl.xxxj.xxx"

 222 SYSTEMPASSWORD = "orcl.xxxx.test"

 253 SYSMANPASSWORD = "orcl.xxxj.xxx"

 263 DBSNMPPASSWORD = "orcl.xxxj.xxxx"
 
 362 DATAFILEDESTINATION =/data/db/oracle/oradata
 
 372 RECOVERYAREADESTINATION=/data/db/oracle/fast_recovery_area

 420 #CHARACTERSET = "US7ASCII"
 421 CHARACTERSET = "AL32UTF8"

 556 TOTALMEMORY = "2048"

2、编辑完成,保存退出。

3、检查配置:

[oracle@localhost database]$ egrep -v "(^#|^$)" /home/oracle/response/dbca.rsp

4、安装创建:

[oracle@localhost database]$ dbca -silent -responseFile /home/oracle/response/dbca.rsp
如果报错:

[root@szkj application]# tail -f /data/db/oracle/cfgtoollogs/dbca/orcl1.log

Oracle 系统标识符 (SID) "orcl" 已经存在。请指定另一个 SID。

5、查看默认实例

[oracle@localhost database]$ env|grep ORACLE_UNQNAME

6、启动监听:

[oracle@localhost database]$ lsnrctl start

正常的监听启动,如下:

重启Oracle数据库的操作步骤

1)查看监听器状态:lsnrctl status

2)停止监听器:lsnrctl stop

3)连接数据库:sqlplus sys/密码 as sysdba

或 以管理员模式登录:

sqlplus / as sysdba

4)停止数据库:shutdown immediate

5)启动数据库:startup

6)退出数据库:exit

7)启动监听:lsnrctl start

7、连接测试

Navicat Premium

七、配置oracle开机自启

1、oracle用户修改Oracle实例配置

[oracle@localhost database]$ vim /etc/oratab

修改下面内容:

将orcl:/data/db/oracle/product/11.2.0/db_1:N 的N改成Y

 23 # orcl:/data/db/oracle/product/11.2.0/dbhome_1:N
 24 orcl:/data/db/oracle/product/11.2.0/dbhome_1:Y

2、root用户添加开机自启策略

1. # 切换到 root 用户
su - root ,  或再打开一个窗口   以root 登录 

2. # 配置文件权限
[root@localhost oracle]# chmod +x /etc/rc.local 
2-2. # 或者 直接给777
[root@localhost oracle]# chmod 777 /etc/rc.local

3. # 然后编辑
[root@localhost oracle]# vim /etc/rc.local

添加如下内容:

# oracle开机自启

su - oracle -c "dbstart"
su - oracle -c "lsnrctl start"
su - oracle -c "lsnrctl start listenerl"

至此,Centos7中的Oracle11g安装完成,整个流程已经过验证,只要按照步骤操作基本不会出现问题。

有些服务器 需要外网访问,可视情况设置:

开放1521端口(远程连接Oracle所需)

查看端口是否开放

firewall-cmd --query-port=1521/tcp

永久开放1521端口号

firewall-cmd --permanent --zone=public --add-port=1521/tcp

重启防火墙

systemctl restart firewalld.service

查看防火墙状态

systemctl status firewalld.service

八、数据库管理

1、进入Oracle数据库

命令:su - oracle
命令:sqlplus / as sysdba

【进入Oracle数据库后可以操作的常用命令】:

关闭数据库:shutdown immediate

启动数据库:startup

启动监听:lsnrctl  start

停止监听:lsnrctl stop

2、数据表及表空间:

创建表空间:

create tablespace ittbank datafile '/u01/app/oracle/oradata/ORCL/ittbank.dbf' size 300m autoextend on;

【说明】:

create tablespace:创建表空间关键字
MyDataBase:数据库名称(表名称)
datafile '/u01/app/oracle/oradata/MyDataBase.dbf':指定数据库文件目录
size 300m:设置表空间初始大小
autoextend on:参数表示当表空间大小不够用时会自动扩容,所有建议加上autoextend on参数。
末尾带autoextend on参数表示当表空间大小不够用时会自动扩容,所有建议加上autoextend on参数。
------------------------------------------------

3、3.创建用户并赋予表空间权限

注:以下命令都需要DBA权限。

  • 创建用户:
    create user ittbank identified by 123456 ;

  • 赋予用户的表空间权限:
    alter user ittbank default tablespace ittbank;;

  • 或者两条命令合并为:
    create user ittbank identified by 123456 default tablespace ittbank;

    【说明】:

      create user:oracle创建用户关键词
      username:用户名
      identified by:指定密码关键词
      passwd:自定义密码 
      default tablespace:数据库映射关键词
      MyDataBase:映射的数据库名称
    
注:刚刚创建完的新用户是没有任何权限的,甚至连登录数据库的权限都没有。这时使用conn 用户名/密码 会提示没有权限。在新建一个用户之后还要对这个用户进行授权操作。当然是要使用有能力授权的用户,如sys、system。角色是指由系统权限集合。通常给某个用户授予权限时如果没有角色存在的话,那么需要一条一条的操作,角色的存在就是使得授权变得很方便。通常一个角色由多个系统权限组成。常用的角色有三个connect(7种权限)、dba、resource(在任何表空间建表)。

4、授予用户管理权限:

grant connect,resource,dba to ittbank ;

  • 删除用户
    drop user"name"cascade;
    注:cascade参数是级联删除该用户所有对象,经常遇到如用户有对象而未加此参数则用户删不了的问题,所以习惯性的加此参数。"name"的引号有无都是一样的。

  • 修改用户密码
    password ittbank( 在用户已经连接的情况下 )或者
    alter user ittbank identified by newpassword

    【说明】:
    
    	grant connect,resource,dba to:将连接数据权限,授权给指定用户
    	grant create session to :将创建会话权限,授权给指定用户
    	username:用户名
    
注意:在给其他用户修改密码时,需要具有DBA的权限或拥有alter user的系统权限。
  • 查看当前用户的角色
    select * from user_role_privs;
    select * from session_privs;
    查看当前用户的系统权限和表级权限
    select * from user_sys_privs;
    select * from user_tab_privs;
    查询用户表
    select name from dba_users;
    修改用户口令
    alter user "name" identified by "password";
    显示当前用户
    show user;

删除表空间:

drop tablespace ittbank including contents and datafiles;

修改表空间大小(注:修改=可以增大,可以减小。)

alter database datafile '/u01/app/oracle/oradata/ORCL/ittbank.dbf' resize 200m;

增加表空间大小(注:增加=只能增大,不能减少。)

alter tablespace ittbank add datafile '/u01/app/oracle/oradata/ORCL/ittbank.dbf' size 2048m;

查询数据库文件:

select * from dba_data_files;

查询当前存在的表空间:

select * from vKaTeX parse error: Expected group after '_' at position 267: ...t(*) from sys.v_̲session;

pl/sql

[declare

/申明部分,一般是变量及常量 /]

[ begin

/执行部分,流程结构控制,sql部分 /]

[exception

/异常处理部分 /]

end

set serveroutput on //打开输出开关

begin

dbms_output.put_line('hello world!'); //输出结果

end;

修改连接数:(注:要重启数据库)

alter system set processes=1000 scope=spfile;

shutdown immediate;

startup;

5.想让B用户对A用户库进行操作,那就授权给B用户(不强制执行)

grant all privileges to Buser;

【说明】:

	grant :授权关键字
	all:全部权限
	privileges to:指定授权人关键字
	Buser:授权人用户名

6.退出数据库

命令:exit;

九、oracle(11g) 数据库设置ID自增功能(一共两个步骤):

1.给要实现ID自增的数据表创建一个序列

SQL> CREATE SEQUENCE "序列名称"

increment by 1    ----- 每次递增:1  

start with 1       ----- 从哪开始:1 

nomaxvalue      ----- 递增最大值:没有 

minvalue 1       ----- 递增最小值:1  

NOCYCLE;      ----- 不循环  

2.给要实现ID自增的数据表创建一个触发器

SQL> CREATE OR REPLACE TRIGGER "触发器名称"

BEFORE INSERT ON "要实现ID自增的数据表名称"

FOR EACH ROW  

BEGIN  

SELECT "之前创建的序列名称".nextval INTO :new."要实现ID自增数据表中的ID字段名"  FROM dual;  

END;  

这2个SQL执行完成后,您的数据表就可以实现ID自增的效果了。

十、遇到oracle(11g) 数据表被上锁,无法正常更新表数据怎么处理?

1.用sql命令行查询目前所有被锁的表:

select b.owner TABLEOWNER,b.object_name TABLENAME,c.OSUSER LOCKBY,c.USERNAME LOGINID, c.sid SID, c.SERIAL# SERIAL from v$locked_object a,dba_objects b,v$session c where b.object_id = a.object_id AND a.SESSION_ID =c.sid;

2.通过sql命令解锁指定进程:

alter system kill session 'SID,SERIAL' immediate; 

解锁被锁数据表后,数据表可恢复正常更新。

十一、遇到oracle(11g) 表中数据查询后发现中文字符乱码怎么转义?

<?php
 
//变量字符类型检测;
$fileType = mb_detect_encoding($appPath , array('UTF-8','GBK','LATIN1','BIG5')); 
//变量强行转换utf-8
$appPath = mb_convert_encoding($appPath ,'utf-8' , $fileType);
 
?>
报错ORA-12514, TNS:listener does not currently know of service requested in connect d...
一、很可能是字符集不对 ,

[oracle@szkj database]$ vim /home/oracle/.bash_profile

这就可以连接上

二、还可能是

oracle centos 重启后报错ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

1、查看监听状态lsnrctl start

2、通过sqlplus / as sysdba ,执行startup来启动数据库,发现报错,initORCL.ora不存在。

3、进入对应目录,打开spfileorcl.ora,发现db_name=orcl,

4、查看环境变量 cat ~/.bash_profile,发现ORACLE_SID=ORCL

5、conn / as sysdba,然后startup nomount

startup nomount选项启动实例,但不安装数据库。当数据库以这个模式启动时,参数文件被读取;后台进程和内存结构被启动;但它们不被附加或与数据库的磁盘结构进行通信。当实例处于这个状态时,数据库是不可使用的。

通常启动到这里可以做create database ,create or recreate control file 或者是mount standby database等动作,修改parameter也是可以的。

6、alter database mount; alter database open;

oracle数据库启动分三个步骤:nomount,mount,open; 而startup是数据库从开始阶段的启动,需要经过上述三个步骤。alter database open是数据库处于mount状态,从mount状态打开数据库的命令。因此,执行startup nomount,alter database mount; alter database open;正是依次执行启动数据库

7、show parameter name;

通过该命令可以查看数据库一些参数,从而判断是否是因为参数配置问题导致。

8、发现oracleName等参数为orcl

9、vi ~/.bash_profile将ORACLE_SID的值改为小写,即orcl,并执行source ~/.bash_profile来使得配置生效。

10、修改ORACLE_HOME下network/admin下的listener.ora与客户端对应的tnsnames.ora

11、重启监听lsnrctl start

12、登录数据库:sqlplus system/oracle@//localhost:1521/orcl;

关于Oracle数据库如果出现乱码,需要查看是否时字符集不一致导致乱码,这样解决

首先查看客户端配置文件:

[oracle@szkj database]$ vim /home/oracle/.bash_profile 

1、如果出现乱码,需要查看是否时字符集不一致导致乱码

以修改为ZHS16GBK字符集为例,具体字符集需要sql查询。

Oracle查看字符集

SELECT * FROM NLS_DATABASE_PARAMETERS p where p.PARAMETER='NLS_CHARACTERSET';
SELECT USERENV('language') FROM DUAL;

1.首先以sysdba的身份登录上去 conn /as sysdba

sqlplus / as sysdba

2.关闭数据库

SQL> shutdown immediate

3.以mount(挂载方式)打开数据库

SQL> startup mount

4.设置session

 SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
     
 SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
     
 SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

5.启动数据库

SQL> alter database open;

6.修改字符集

SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
可能会报错,提示我们的字符集:新字符集必须为旧字符集的超集,跳过超集检查做更改:

SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
这条语句就可以了,TERNAL_USE提供的帮助就会使oracle绕过了子集与超集的验证,这条语句和上面的语句内部操作时完全相同的。

7.关闭数据库,重新启动

 SQL>shutdown immediate
     
SQL> startup

完成 。

原理: 快速解决linux上oracle安装乱码问题


问题:在Linux上安装Oracle时,由于oracle用户的local LANG设置问题,导致安装oracle软件时,安装界面上很多地方显示为乱码。

解决办法:在oracle用户下执行:export LC_ALL=en_US

再次安装oracle,所有窗口按钮就都可以显示为英文了。

下面是有关字符集的详细介绍。

建议oracle11g及更高版本的客户端和服务器安装使用al32utf8编码。

强烈要求os客户端、NLS_LANG、oracle数据库字符集都设置成统一的。

另外如果使用em,也要注意浏览器的字符集是否一致。

查看数据库字符集

数据库服务器端字符集可通过视图V$NLS_PARAMETERS中的NLS_CHARACTERSET的值查看。

本地设置环境变量NLS_LANG(我的电脑,右键,属性,高级,环境变量),如设置为SIMPLIFIED CHINESE_CHINA.ZHS16GBK。

数据库的字符集在安装时指定后,不可修改。如一定要修改字符集,那么建议重新建库。不过如果是升级超集,倒是可以的。

方法1:

SQL> select * from sys.props$where name = 'NLS_CHARACTERSET';

方法2:

SQL> select * fromV$NLS_PARAMETERS;

PARAMETER VALUE

NLS_DATE_LANGUAGE AMERICAN

NLS_CHARACTERSET ZHS16GBK

NLS_SORT BINARY

注意事项:在使用exp imp的时候,NLS_LANG参数的字符集设置一定要和oracle数据库的字符集一样,否则就会出现字符转换现象。就会导入数据时,报列的长度不够,导出时报 ORA-00091等问题。

NLS_LANG这个参数的设置的值,最低要求是要和客户端操作系统的字符集一样。因为oracle会自动转码的。但是为了防止客户端上的字符集在oracle服务端没有对应字符(比如客户端zhs16gbk,服务端al32utf8),造成转换失败,变为乱码,强烈推荐将客户端、NLS_LANG、oracle数据库字符集都设置成一样的。

这里的客户端指的是:

比如你用的是pl/sql登录的,那么客户端就是pl/sql,而NLS_LANG就是你在本机环境变量里设置的值。如果你要crt或者xshell登录的,那么客户端就是crt或者xshell,而NLS_LANG就是linux操作系统里的值,如果没有,就需要手动指定,所以,可以将其加入到.bash_profile里。

所以至于我们的环境变量NLS_LANG设置成exportNLS_LANG=AMERICAN_AMERICA.ZHS16GBK还是exportNLS_LANG=AMERICAN_AMERICA.AL32UTF8都无所谓,只要保证crt或者xshell的语言设置与其一样就行。

如果linux里当前会话设置成ZHS16GBK,那么crt和xshell语言选择默认

如果linux里当前会话设置成AL32UTF8,那么crt和xshell语言选择UTF-8

由此设置步骤可得知此设置不仅仅是针对PLSQL的,所有在客服机上连接ORACLE时显示的中文为?时都必须通过这个方法设置其字符集,使环境变量NLS_LANG与客户端上的一致方可正确显示中文内容。

检测字符集是否设置正确

先设置NLS_LANG环境变量

Linux临时设置当前会话export NLS_LANG=

Windows设置右键电脑设置或者临时设置set NLS_LANG=

$ sqlplus / as sysdba

SQL> insert into t1values (1,'中国');

SQL> select id,name,dump(name,1016) from t1;

   ID         NAME    DUMP(NAME,1016)

    1          中国       Typ=1 Len=4 CharacterSet=ZHS16GBK: d6,d0,b9,fa

dump(name,1016)是指将name这个列以16进制直接显示出来。所以八进制就是1008,十进制就是1010。前面的10就是将字符集也显示出来。

$ sqlplus / as sysdba

SQL> insert into t1values (1,'中国');

SQL> select id,name,dump(name,1016) from t1;

  ID    NAME     DUMP(NAME,1016)

  1     中国     Typ=1 Len=6 CharacterSet=AL32UTF8:e4,b8,ad,e5,9b,bd

如果exportNLS_LANG=AMERICAN_AMERICA.ZHS16GBK那么客户端字符集设置为Default

如果exportNLS_LANG=AMERICAN_AMERICA.AL32UTF8那么客户端字符集设置为UTF-8

常见的简体中文字符集都是US7ASCII的超集。

常见简体中文字符集

GB2312又称为ZHS16CGB231280 1981年5月实施 使用双字节编码 1995年12月实施 GBK字符集 是在GB2312-80标准基础上的内码扩展规范 使用双字节编码。

ZHS32GBK18030 2000年3月发布 向下兼容 GBK

ZHS16GBK 是ZHS32GBK18030的超集

Unicode是一个世界范围内大多数常用语言字符的编码方案。

UCS-2是一个16bit的Unicode编码,固定长度,每一个字符为2byte,主要用户java和Microsoftwindows。支持字符比较少

UTF-8(AL32UTF8)是一个8bit的Unicode编码,是变长编码,可能是1byte(字节)、2byte、3byte、4byte。UTF-8是HTML和网络浏览器使用最多的Unicode编码。

UTF-16(AL16UTF16)是一个16bitUnicode编码,是UCS-2的超集,完全兼容UCS-2,使用两个UCS-2码来表示扩充字符,一个字符在UTF-16里是2byte或者4byte。UTF-16主要用户Microsoft windows 2000。UTF-16编码字符只能用于数据库国家字符集。

相关推荐
simpleGq2 分钟前
Redis知识点整理 - 脑图
数据库·redis·缓存
NiNg_1_23410 分钟前
关系型数据库和非关系型数据库详解
数据库·oracle·nosql
paopaokaka_luck10 分钟前
基于Spring Boot+Vue的多媒体素材管理系统的设计与实现
java·数据库·vue.js·spring boot·后端·算法
python资深爱好者16 分钟前
NoSQL数据库与关系型数据库的主要区别
数据库·oracle·nosql
sj116373940321 分钟前
Kafka参数了解
数据库·分布式·kafka
日里安1 小时前
8. 基于 Redis 实现限流
数据库·redis·缓存
EasyCVR2 小时前
ISUP协议视频平台EasyCVR视频设备轨迹回放平台智慧农业视频远程监控管理方案
服务器·网络·数据库·音视频
Elastic 中国社区官方博客2 小时前
使用真实 Elasticsearch 进行更快的集成测试
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·集成测试
明月与玄武3 小时前
关于性能测试:数据库的 SQL 性能优化实战
数据库·sql·性能优化
PGCCC4 小时前
【PGCCC】Postgresql 存储设计
数据库·postgresql