0x00 快速入门
0x01 环境准备
0x02 数据库安装
Oracle 10g安装
Oracle 11g安装
0x03 oracle客户端安装
0x04 补充知识
0x05 入坑记
0x00 快速入门
目前Oracle最新版本为18c 应用最广泛的为11g;
官网下载:https://www.oracle.com/downloads/index.html
0x01 环境准备
Oracle 11g安装环境准备
#环境准备
操作系统: Windows Server 2008 R2 :
必须基础环境: JDK (Java)
Oracle版本:Oracle Database 11g Release 2 (11.2.0.1.0) for Microsoft Windows (x64)
#Oralce11g下载页面:
https://www.oracle.com/database/technologies/112010-win64soft.html
#依次解压下面的压缩文件到当前目录之下
win64_11gR2_database_1of2.zip
win64_11gR2_database_2of2.zip
0x02 数据库安装
Oracle 10g安装
Oracle 10g提供了高性能与高稳定性的企业级数据存储方案,也对Windows操作系统提供了更好的支持。
借助Windows操作系统以线程为基础的服务模式,Oracle 10g可以提供更高的执行性能、更稳定的执行环境,以及更具扩展性的平台。
1.右键以管理员运行setup.exe出现图1所示的“Oracle Database 10g安装”画面。
画面中网格背景寓示了10g的卖点Grid Computing“网格计算”
, 选中“高级安装”,以便为SYS、SYSTEM设置不同的口令
,并进行选择性配置。
2.“下一步”进入“Oracle Universal Installer:指定文件位置”,设置源“路径”、“名称”和目的“路径”,名称”对应ORACLE_HOME_NAME环境变量,“路径”对应ORACLE_HOME环境变量
注意:最好不要有英文;
3.“下一步” 进入“Oracle Universal Installer:选择安装类型”,企业版(E)
4.选择数据库配置通用
5.下一步,进入“Oracle Universal Installer:指定数据库配置选项”。(非常重要)
指定“全局数据库名”和“SID”,对这两个参数的指定一般相同,例如:oract(后面的服务会用到)也可以将“全局数据库名”设置为域名例如:oract.abc.com
如果选择“创建带样本方案的数据库,OUI会在数据库中创建HR、OE、SH等范例方案(sample schema),大数据专用!
6.下一步,进入“Oracle Universal Installer:选择数据库管理选项”,选择Database Control管理数据库,不启用电子邮件通知;
7.保持默认值,下一步,进入“Oracle Universal Installer:指定数据库文件存储选项”
8.保持默认值,下一步,进入“Oracle Universal Installer:指定备份和恢复选项” (不恢复和备份选项)
9.保持默认值,单击“下一步”,进入“Oracle Universal Installer:指定数据库方案的口令”,对不同的帐户设置不同的口令,或者使用同一个密码
10.单击“下一步”,继续安装,进入“Oracle Universal Installer:概要”
11.单击“安装”,开始安装过程
12.数据库创建完成时,显示“Database Configuration Assistant”窗口
13.单击“口令管理”,进入“口令管理”窗口
解锁用户HR、OE和SCOTT,输入HR和OE的口令,SCOTT的默认口令为tiger。
安装过程中需要注意:口令设置时一般有四个用户:
* 超级管理员:sys/change_on_install;
* 普通管理员:system/manager;
* 普通用户:scott/tiger; (普通用户在业务上使用为了安全)
* 大数据用户:sh/sh;
#超级/普通管理员账号一定要设置密码
sys :admin
system :system
14.安装结束验证:
Enterprise Manager Database Control URL - (orcl) :
http://USER-39:1158/em
数据库配置文件已经安装到 C:\oracle\product\10.2.0,同时其他选定的安装组件也已经安装到 C:\oracle\product\10.2.0\db_1。
iSQL*Plus URL 为:
http://USER-39:5560/isqlplus
iSQL*Plus DBA URL 为:
http://USER-39:5560/isqlplus/dba
15.Oracle 10g 的卸载
参考如下步骤:
1)直接运行卸载程序;
2)删除硬盘上残留文件,如果删除不掉则先进入到安全模式下删除;
3)同时删除注册表中所有与Oracle有关的配置项。
补充说明:
1.目录树型结构图及PATH环境变量:
D:\oracle\product\10.1.0\dbct\bin;
D:\oracle\product\10.1.0\dbct\jre\1.4.2\bin\client;
D:\oracle\product\10.1.0\dbct\jre\1.4.2\bin;
2.默认ORACLE_BASE所有的ORACLE软件文件和数据库文件都位于它下面的子目录中。
在Windows中,默认的ORACLE_BASE目录是:D:\oracle\product\10.1.0(跟你设置有关)
在UNIX中,默认的ORACLE_BASE目录是:/pm/app/oracle/10.1.0
3.默认ORACLE_HOMEE是访问所有ORACLE软件的路径。
在Windows中,默认的ORACLE_HOME目录是:D:\oracle\product\10.1.0\dbct (跟你设置有关)
在UNIX中,默认的ORACLE_HOME目录是:/pm/app/oracle/10.1.0/dbct
admin文件夹,存储初始化文件和日志文件网络监听控制器
Oradata\oract文件夹,存储数据库数据文件.dbf、控制文件.ctl、重做日志文件.log
4.Oracle 注册表项之语言设置
#名称 数据
NLS_LANG SIMPLIFIED CHINESE_CHINA.ZHS16GBK
#//其中:SIMPLIFIED CHINESE表示简体中文 simplified,CHINA表示中文日期格式,ZHS16GBK表示编码。
详细说明:
NLS_LANG格式:NLS_LANG=language_territory.charset 有三个组成部分(语言、地域和字符集)
,每个组成成分控制了NLS子集的特性。
三个成分可以任意组合,例如:
AMERICAN_AMERICA.US7SCII
JPANESE_JAPAN.JA16EUC
#还有一些子集可以更明确定义NLS_LANG参数:
NLS_DATE_FORMAT 缺省的日期格式
NLS_DATE_LANGUAGE 缺省的语言
NLS_NUMBERIC_CHARACTERS 小数字符和组分隔开
NLS_CURRENCY 本地货币字符
NLS_ISO_CURRENCY ISO货币字符
NLS_SORT 字符排序序列
其中:language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,Charset 指定字符集;如果使用英文,将NLS_LANG的值改为:AMERICAN_AMERICA.WE8ISO8859P1 或 englishi_ America.US7SCII
在SQL/PLUS中,运行下面的SQL语句,检查所连接数据库的字符集:
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
5.Oracle 10G服务进程
在Windows操作系统下安装Oracle 10g数据库以后,计算机的运行速度明显降低,所以在不使用数据库时,可将Oracle 10g数据库服务关闭
要使用数据库时,根据应用情况只启动必要的服务,必须启动的服务:
OracleServicexxx就是xxx就是我们的"全局数据库名”和“SID"
OracleCSService服务在做10G RAC的時候才會有,CSS(Cluster Synchronization Service)
6.ORACLE DATABASE 10G 版本安装异常处理
设置兼容性为windows xp,和右键管理员启动安装程序Setup.exe
Oracle 11g安装
0.在Oracle11g解压的根目录中运行 C:\11gR2\database\setup.exe
,弹出安装界面;
1.配置安全更新(可以直接跳过),点击下一步即可
2.安装选项:创建和配置数据库
3.系统类选项:选择桌面类
4.典型安装配置目录信息:Oracle根目录/软件位置/数据库文件位置/
数据库版本: 企业版
字符集: Unicode(AL32UTF-8)
全局数据库名称: orcl
设置后面sysdba的密码:PS(如果不设置默认密码manager,密码中不能出现@符号) WeiyiGeek.123
5.安装条件检测(然后显示出概要),您可以保存响应文件
6.最后安装Oracle产品(等待几分钟即可)
7.安装完成之后会然我们管理Oracle数据库账号密码(是否停用等打勾为确定锁定)
为了安全建议各个账号的密码不能设置相同
8.通过客户端或者是网页端连接数据库;
OC4J管理使用Application Server Control从浏览器管理OC4J
Database Control - orcl Oracle Enterprise Manager 11g : https://localhost:1158/em/console/logon/logon
Enterprise Manager 配置主要功能:
管理员账号密码设置,补丁管理,封锁连接,管理包访问以及监控数据库
实例显示,主目录以及运行情况等待,备份和恢复
9.验证登录使用 PLSQL Developer 12 (64 bit)
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
补充知识:
1.环境变量设置
#Oracle语言:
NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
#监听目录
setx /M ORACLE_HOME "C:\app\Oracle\product\11.2.0\dbhome_1"
setx /M TNS_ADMIN "%ORACLE_HOME%\NETWORK\ADMIN"
setx /M PATH "%PATH%;%ORACLE_HOME%\BIN"
2.验证Oracle是否正常启动监听运行
#看服务 ORCL表示实例名称
- OracleServiceORCL (启动)#@不建议自启
- OracleRemExecService
- OracleOraDb11g_home1TNSListener #@不建议自启
- OracleMTSRecoveryService
- OracleDBConsoleorcl
- OracleVssWriterORCL
- OracleOraDb11g_home1ClrAgent(未启动)
- OracleJobSchedulerORCL
#看端口
TCP 127.0.0.1:1521 0.0.0.0:0 LISTENING 2828
TCP 127.0.0.1:1521 127.0.0.1:49192 ESTABLISHED 2828
#看状态
lsnrctl status #查看oracle状态
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 28-8月 -2019 11:1
2:52
Copyright (c) 1991, 2010, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ
ction
启动日期 28-8月 -2019 09:58:26
正常运行时间 0 天 1 小时 14 分 27 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 C:\app\Oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
监听程序日志文件 c:\app\oracle\diag\tnslsnr\WIN-76Q3KD7PI52\listener\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个实例。实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
3.Oracle的停止与启动
#重要提示:管理员身份运行该脚本
启动服务(OrclService_Start.bat)命令:
net start "OracleDBConsoleorcl"
net start OracleOraDb11g_home1TNSListener
net start OracleServiceORCL
pause
exit
停止服务(OrclService_Stop.bat)命令:
net stop "OracleDBConsoleorcl"
net stop OracleOraDb11g_home1TNSListener
net stop OracleServiceORCL
pause
exit
4.Oracle监听停止和启动
lsnrctl stop #关闭
lsnrctl start #启动
注意事项:
安装完之后oracle默认配置的监听是localhost,如果不仅仅是本地访问,需要其他机器能访问到的话需要修改监听的地址。
#开始 -> Oracle - OraDb11g_home1 -> 配置和移植工具 -> net manager (只是本身的ps/SQL连接的时候生效)
-> 服务命名 -> 数据库名称(比如我这里orcl) -> 地址配置 -> 127.0.0.1 1521
#保存配置
文件 -> 保存网络配置
#监听程序设置机器IP
# -> 数据库服务 -> 添加数据库 -> Oracle主目录就是ORACLH_HOME
# -> 监听地址 -> 将localhost改成外部IP地址 -> 192.168.1.129
外部机器登录到ORACLE数据库中
0x03 oracle客户端安装
PLSQL Developer 12(64bit)
描述:用PL/SQL连接到其他Oracle机器上面:
1.下载instantclient_11_2并解压百度云: https://pan.baidu.com/s/1JlcwT42Jnn-OqrtIJ2WLWg 密码:t8o9
2.更改下载的tnsnames.ora修改成为您要连接的Oracle服务器的IP端口以及服务名称等待,并且设置环境变量
192.168.1.129_bd =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.129)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
#环境变量设置(指向instantclient_11_2并解压的目录)
setx /M TNS_ADMIN "F:\ChoromeDownload\instantclient_11_2"
3.进行PL/SQL配置oci依赖库:
F:\ChoromeDownload\instantclient_11_2\oci.dll
4.最后选择登录192.168.1.129_bd数据库输入账号密码即可
192.168.1.129:1521/orcl
注意: 如果本机安装有Oracle数据库的话直接在Oracle根目录下安装 C:\app\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
文件进行修改配置配置oracle客户端的监听;
Navicat Premium 12 客户端连接
描述:可以看到Navicat支持众多的数据库连接,还包括云上数据库的连接;
下面进行连接Oracle数据库配置(需要设置登录角色):
0x04 补充知识
知识1.Oracle监听器的静态注册与动态注册区别
描述:如何查询某服务是静态注册还是动态注册?
#在运行lsnrctl status 常会看到如下返回值:
服务Orcl包含1个例程。
例程"mydata",状态 UNKOWN,包含此服务的一个处理程序。
服务Orcl包含1个例程。
例程"mydata",状态 READY,包含此服务的一个处理程序
服务Orcl包含1个例程。
例程"mydata",状态 BLOCK,包含此服务的一个处理程序
(1)静态注册
由于静态注册参数是手动静态添加与数据库无关
,监听配置中数据库服务中的全局数据库名写任意内容与数据库无关
,只要保证SID正确即可连上数据库。
数据库无法确认监听是否正确配置因此lsnrctl中的status显示状态为unkown
,即不保证能连通数据库;
监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在
# 在配置listerner.ora中 #
#lsnrctl status中显示如下
服务"WeiyiGeek"包含1个例程。
例程"mydata" 状态UNKOWN,包含此服务的一个处理程序
#WeiyiGee 从监听配置过程,数据库服务中的“全局数据库名”读到的值(即配置文件中GLOBAL_DBNAME的值)
#"mydata" 从监听配置中,数据库服务中SID读到的值(即SID_NAME的值)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = WeiyiGeek)
(ORACLE_HOME = /orahome/oracle/product/10.2.0/db_1)
(SID_NAME = mydata)
)
)
# 在配置tnsname.ora中 #
服务名SERVICE_NAME即为WeiyiGeek,否则连接不到数据库。
#在客户端连接服务器时,填写的主机字符串即为此服务命名192.168.1.129_bd
192.168.1.129_bd =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.129)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = WeiyiGeek) #关键点哟
)
)
静态注册监听不知道实例的具体状态,所以监听启动之初查看实例信息其状态信息显示为UNKNOWN.例如:
> lsnrctl status LISTENER_PHAMR
Copyright (c) 1991, 2010, Oracle. All rights reserved.
Service "phamr" has 1 instance(s). 监听状态中的服务名
Instance "phamr", status UNKNOWN, has 1 handler(s) for this service... 监听状态中的实例名
(2)动态注册
描述: 动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。
不管何时关闭数据库,动态注册的数据库都会动态地从监听器注销,而与之相关的信息将从状态列表中消失。不管数据库是在运行还是已经关闭,监听器总是知道它的状态;该信息将被用于连接请求的回退(fallback)和负载平衡。
pmon在数据库启动到mount或open时动态从参数文件中读取service_names值缺省为dbca建立数据库时的全局数据库名(orcl)
。
设置参数service_names为'a,b,c',命令如下: alter system set service_names='a,b,c'
;
#lsnrctl状态如下:
服务“test”包含1个例程。
例程"WeiyiGeek",状态 UNKOWN,包含此服务的一个处理程序
服务"a"包含1个例程。
例程"WeiyiGeek",状态 READY,包含此服务的一个处理程序
服务"b"包含1个例程。
例程"WeiyiGeek",状态 READY,包含此服务的一个处理程序
服务"c"包含1个例程。
例程"WeiyiGeek",状态 READY,包含此服务的一个处理程序
服务 "WeiyiGeek" 包含一个例程。
例程"mydata",状态 READY, 包含此服务的一个处理程序
#以上服务名a, b, c, WeiyiGeek都为READY为动态注册,注意这里最后一条WeiyiGeek是PMON缺省动态注册到监听器内的。
不管参数service_names为何值pmon都会自动以全局数据库名(这里为WeiyiGeek)为服务名,动态注册一个监听。
自定义端口的动态监听注册:
若要启用非默认端口1521的动态监听注册,缺省状态Oracle不会进行动态注册。
要启用动态注册,必须设置local_listener参数,并在服务端配置tnsnames.ora指定监听参数
,或者直接通过修改local_listener指定监听参数。步骤如下:
1.服务端: Net Manager 配置监听程序,监听端口为1525(非默认端口)并且保存配置
2.指定监听参数
#法1:直接通过修改local_listener参数指定
SQL>alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.23)(PORT=1525))';
System altered
SQL>alter system register
System altered
#法2:在Oracle服务器端建立$ORACLE_HOME/network/admin/tnsnames.ora 解析文件位置并填入如下内容
WeiyiGeekOracleLogin =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.1.23)(PORT = 1525))
)
)
#设置参数指定通过tnsnames.ora内的信息指定监听参数
SQL>alter system set local_listener=WeiyiGeekOracleLogin;
System altered
SQL>alter system register;
监听动态注册时的实例状态:来自PMON进程动态注册时的实例3种状态:READY、BLOCKED和RESTRICED
READY:表示数据库实例已经处于mount或者open状态,可以接受客户端连接
BLOCKED:表示数据库实例还处于nomount状态或者该实例类型为ASM实例,不接受客户端连接,如果这时候客户端去连接数据库会报ora-12528错误
RESTRICED:表示数据库处于RESTRICED模式,不接受普通权限的远程客户端连接,如果这时候客户端去连接数据库会报ora-12526错误
动态与静态区别总结:
1.静态注册(手动填写参数): 状态为 "Unknown"
而是通过搜索Listener.ora找到匹配的service后进行注册相应的服务
global_dbname对应的是oracle对外的服务名,即初始化参数里的service_names
sid_name对应的是oralce实例的名称,即初始化参数里的instance_name
2.动态注册(由PMON进程自动从参数文件获取): 状态为 "READY"
缺省情况下若启用动态注册监听端口号必须为1521,若启用其他端口的动态监听注册必须要做相关配置即(自定义端口的动态监听注册监听端口)
要实现动态注册,数据库的实例至少要处于nomount状态
注意事项:
静态注册监听客户端在配置tnsnames.ora服务命名时,"(Oracle 8i或更高版本)服务名"里填写内容要与
服务端静态注册监听器时的全局数据库名一致,
否则无法连通。如果在数据库实例启动后再启动监听器(Listener.ora文件中不需要配置相关的SID信息), PMON会自动对监测到的Service进行注册.
实例既可以动态注册也可以同时是静态注册,状态分别显示为READY和UNKNOWN
0x05 入坑记
问题1:新手面临最容易出错的两个文件
常见目录:C:\app\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN
监听配置文件(主):listener.ORA
监听登录配置文件(从):nsnames.ORA (transparence Network Substrate透明网络底层,监听服务是它重要的一部分不是全部,不要把TNS当作只是监听器)
正常监听(连接)配置文件参考
listener.ORA
# listener.ora Network Configuration File: C:\app\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
# listener.ora文件两大模块
# SID_LIST_LISTENER模块:配置监听的静态注册特性,包含数据库服务名、ORACLE_HOME、实例名等信息。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\Oracle\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\Oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = orcl) #数据库服务名称
(ORACLE_HOME = C:\app\Oracle\product\11.2.0\dbhome_1)
(SID_NAME = ORCL) #实例名称
)
)
# LISTENER模块:监听名字、连接协议、监听主机、监听端口等基本配置信息
# 监听默认名字是LISTENER也可以配置别名
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.129)(PORT = 1521))
)
)
ADR_BASE_LISTENER = C:\app\Oracle
tnsnames.ora
# tnsnames.ora Network Configuration File: C:\app\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
#配置远程连接重要参数
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)