一、安装前准备
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);
-
- ?>
复制代码 navicate 毗连oracle 毗连不上,报错
- 报错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
2.关闭数据库
3.以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;
- 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;
- 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编码字符只能用于数据库国家字符集。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |