目录
- 一、安装前准备
-
- 1、安装前置工具(安装过可以忽略)
- 2、更配yum源
- [3 修改主机名: oracle配置文件中需要](#3 修改主机名: oracle配置文件中需要)
- [4、配置网络 : 非必要](#4、配置网络 : 非必要)
- 5、配置hosts文件
- 5、关闭防火墙
- 二、系统环境准备
-
- [1. 检测是否符合安装Oracle 11g的环境需求(2核CPU 、2G内存、8G的硬盘空间)](#1. 检测是否符合安装Oracle 11g的环境需求(2核CPU 、2G内存、8G的硬盘空间))
- [2. 检测是否已安装Oracle](#2. 检测是否已安装Oracle)
-
-
- 2.1查看是否有Oracle的进程:
- [2.2检查是否有Oracle用户 : id oracle](#2.2检查是否有Oracle用户 : id oracle)
-
- [3. 创建用户组](#3. 创建用户组)
- [4. 创建安装目录:](#4. 创建安装目录:)
- [5. 修改目录权限:](#5. 修改目录权限:)
- 三、安装依赖包
- 四、下载Oracle11g安装包
-
- [1、在Oracle官方网站下载 Oracle database 11g 的安装包](#1、在Oracle官方网站下载 Oracle database 11g 的安装包)
- 2、创建/data/u01/software目录
- 3、上传安装包到目录下,解压
- 五、静默安装Oracle11G数据库
-
- 1、修改内核配置文件
- 2、修改用户限制
- [3、修改/etc/pam.d/login 文件](#3、修改/etc/pam.d/login 文件)
- 4、修改环境变量
- 5、设置oracle用户环境变量
- 6、修改静默安装响应文件
- 7、执行安装
-
-
- 7.1、切换到解压的安装包目录:
- 7.2、执行安装命令:
- 7.3、安装过程中可以再开启一个终端,使用命令查看实时安装日志
- 7.4、当出现如下信息时,需要再开启一个终端,以root用户执行这两个脚本。
- [7.5、脚本执行完成后,再回到oracle安装的终端界面,回车。此时显示"Successfully Setup Software."则Oracle已经安装完成。](#7.5、脚本执行完成后,再回到oracle安装的终端界面,回车。此时显示“Successfully Setup Software.”则Oracle已经安装完成。)
- 7.6、使用sqlplus登录验证,成功登录。
-
- 六、创建数据库实例
- 七、配置oracle开机自启
- [有些服务器 需要外网访问,可视情况设置:](#有些服务器 需要外网访问,可视情况设置:)
- 八、数据库管理
-
- 1、进入Oracle数据库
- 2、数据表及表空间:
- 3、3.创建用户并赋予表空间权限
-
-
- [注:刚刚创建完的新用户是没有任何权限的,甚至连登录数据库的权限都没有。这时使用conn 用户名/密码 会提示没有权限。在新建一个用户之后还要对这个用户进行授权操作。当然是要使用有能力授权的用户,如sys、system。角色是指由系统权限集合。通常给某个用户授予权限时如果没有角色存在的话,那么需要一条一条的操作,角色的存在就是使得授权变得很方便。通常一个角色由多个系统权限组成。常用的角色有三个connect(7种权限)、dba、resource(在任何表空间建表)。](#注:刚刚创建完的新用户是没有任何权限的,甚至连登录数据库的权限都没有。这时使用conn 用户名/密码 会提示没有权限。在新建一个用户之后还要对这个用户进行授权操作。当然是要使用有能力授权的用户,如sys、system。角色是指由系统权限集合。通常给某个用户授予权限时如果没有角色存在的话,那么需要一条一条的操作,角色的存在就是使得授权变得很方便。通常一个角色由多个系统权限组成。常用的角色有三个connect(7种权限)、dba、resource(在任何表空间建表)。)
-
- 4、授予用户管理权限:
-
-
- [注意:在给其他用户修改密码时,需要具有DBA的权限或拥有alter user的系统权限。](#注意:在给其他用户修改密码时,需要具有DBA的权限或拥有alter user的系统权限。)
-
- 5.想让B用户对A用户库进行操作,那就授权给B用户(不强制执行)
- 6.退出数据库
- [九、oracle(11g) 数据库设置ID自增功能(一共两个步骤):](#九、oracle(11g) 数据库设置ID自增功能(一共两个步骤):)
- [十、遇到oracle(11g) 数据表被上锁,无法正常更新表数据怎么处理?](#十、遇到oracle(11g) 数据表被上锁,无法正常更新表数据怎么处理?)
- [十一、遇到oracle(11g) 表中数据查询后发现中文字符乱码怎么转义?](#十一、遇到oracle(11g) 表中数据查询后发现中文字符乱码怎么转义?)
- [navicate 连接oracle 连接不上,报错](#navicate 连接oracle 连接不上,报错)
-
-
-
- [一、很可能是字符集不对 ,](#一、很可能是字符集不对 ,)
- 二、还可能是
-
-
- 关于Oracle数据库如果出现乱码,需要查看是否时字符集不一致导致乱码,这样解决
一、安装前准备
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 的安装包
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 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编码字符只能用于数据库国家字符集。