安装Oracle后连接必要的设置项
一、解决中文乱码问题
- 查看系统用什么编码
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
SQL>
- windows 乱码
添加环境变量NLS_LANG值设为AMERICAN_AMERICA.AL32UTF8
![image]()
之所以乱码,就是因为二者编码不统一,设置后中文就不会乱码了。
![image]()
注意,编码问题在数据库一开始装好时,就需要设置好。推荐统一设置成AMERICAN_AMERICA.AL32UTF8,不要设置成中文的编码,只要是UTF8编码就可以了。 - 服务器控制台乱码
同样把当前的SHELL环境的设置一下环境变量NLS_LANG值设为AMERICAN_AMERICA.AL32UTF8,二者统一以后就不会出现乱码了。
设置当前环境变量:vim ~/.bashrc,追加一下即可。
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
添加完成后效果:
[root@localhost ~]# su - oracle
Last login: Wed May 28 19:25:54 CST 2025 on pts/0
[oracle@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.2.0 Production on Wed May 28 19:41:22 2025
Copyright (c) 1982, 2014, Oracle. All rights reserved.
SQL> conn c##scott/tiger;
Connected.
SQL> set linesize 200 pagesize 1000;
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30
7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20
7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20
7900 JAMES CLERK 7698 1981-12-03 00:00:00 950 30
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 20
7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10
1569 二麻子 CLERK 7902 1980-12-17 00:00:00 800 20
9369 李四 CLERK 7902 1980-12-17 00:00:00 800 20
9569 王五 CLERK 7902 1980-12-17 00:00:00 800 20
17 rows selected.
其中:set linesize 200 pagesize 1000;为格式化输出,不然满屏凌乱。
二、创建数据库表、用户及表空间
- 如果是使用Oracle 12C的版本,先查看是否
SQL> conn sys as sysdba;
Enter password:
Connected.
SQL>
SQL> select CDB from v$database;
CDB
---
YES
SQL>
说明:
如果得到的结果为YES,那么就是CDB的数据库,否则,则不是。
在CDB容器中创建用户时,前面必须添加C## ,而PDB数据库不需要加前缀。
是的话,在默认情况下在Oracle 12C+创建不以“C##”开头的用户都会报错
ORA-65096: invalid common user or role name
Cause: An attempt was made to create a common user or role with a name that was not valid for common users or roles. In addition to the usual rules for user and role names, common user and role names must start with C## or c## and consist only of ASCII characters.
Action: Specify a valid common user or role name.
- 查看当前使用容器
SQL> select sys_context ('USERENV', 'CON_NAME') from dual;
SYS_CONTEXT('USERENV','CON_NAME')
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CDB$ROOT
SQL>
- 临时不使用时,可以这样执行,退出后自动还原。
alter session set "_ORACLE_SCRIPT"=true;
然后,就可以不用c##开头了,就可以创建了。
- 创建用户
SQL> alter session set "_ORACLE_SCRIPT"=true;
Session altered.
SQL> CREATE USER we IDENTIFIED BY "admin123" ;
User created.
SQL>
注意:密码需要使用双引号包裹起来,避免一些异常错误。
使用单引号会报错: ORA-00988: missing or invalid password(s)
不使用双引号报错:ORA-00922: missing or invalid option
- 给用户授权
SQL> grant connect,resource,unlimited tablespace to we;
Grant succeeded.
SQL>
- 查看表空间位置情况
Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.2.0
Connected as sys@ORCL AS SYSDBA
SQL> SELECT t1.name AS tablespace_name,t2.name AS datafile_name FROM v$tablespace t1 JOIN v$datafile t2 ON t1.ts#=t2.ts#;
TABLESPACE_NAME DATAFILE_NAME
------------------------------ --------------------------------------------------------------------------------
SYSTEM /oracle/oradata/orcl/system01.dbf
SYSTEM /oracle/oradata/orcl/system01.dbf
SYSTEM /oracle/oradata/orcl/system01.dbf
SYSAUX /oracle/oradata/orcl/sysaux01.dbf
SYSAUX /oracle/oradata/orcl/sysaux01.dbf
SYSAUX /oracle/oradata/orcl/sysaux01.dbf
TEMP /oracle/oradata/orcl/undotbs01.dbf
TEMP /oracle/oradata/orcl/undotbs01.dbf
UNDOTBS1 /oracle/oradata/orcl/undotbs01.dbf
SYSTEM /oracle/oradata/orcl/pdbseed/system01.dbf
SYSTEM /oracle/oradata/orcl/pdbseed/system01.dbf
SYSTEM /oracle/oradata/orcl/pdbseed/system01.dbf
EXAMPLE /oracle/oradata/orcl/users01.dbf
USERS /oracle/oradata/orcl/users01.dbf
SYSAUX /oracle/oradata/orcl/pdbseed/sysaux01.dbf
SYSAUX /oracle/oradata/orcl/pdbseed/sysaux01.dbf
SYSAUX /oracle/oradata/orcl/pdbseed/sysaux01.dbf
SYSTEM /oracle/oradata/orcl/pdborcl/system01.dbf
SYSTEM /oracle/oradata/orcl/pdborcl/system01.dbf
SYSTEM /oracle/oradata/orcl/pdborcl/system01.dbf
TABLESPACE_NAME DATAFILE_NAME
------------------------------ --------------------------------------------------------------------------------
SYSAUX /oracle/oradata/orcl/pdborcl/sysaux01.dbf
SYSAUX /oracle/oradata/orcl/pdborcl/sysaux01.dbf
SYSAUX /oracle/oradata/orcl/pdborcl/sysaux01.dbf
USERS /oracle/oradata/orcl/pdborcl/SAMPLE_SCHEMA_users01.dbf
TEMP /oracle/oradata/orcl/pdborcl/SAMPLE_SCHEMA_users01.dbf
EXAMPLE /oracle/oradata/orcl/pdborcl/example01.dbf
USERS /oracle/oradata/orcl/pdborcl/example01.dbf
27 rows selected
SQL>
- 创建表空间
先登录服务器后台,进入oracle用户su - oracle在/oracle/oradata/orcl/下创建相应的用户的目录,用来存放表空间:
# 创建专属目录
mkdir -p /oracle/oradata/orcl/we
# 保持权限统一
chmod 750 we
接下来,创建专属的表空间和临时表空间
SQL> create tablespace we_data
2 logging
3 datafile '/oracle/oradata/orcl/we/wedata.dbf'
4 size 1G
5 autoextend on
6 next 100m
7 maxsize UNLIMITED
8 extent management local
9 Segment space management auto ;
Tablespace created
SQL>
SQL> create temporary tablespace we_temp
2 tempfile '/oracle/oradata/orcl/we/wetemp.dbf'
3 size 100m
4 autoextend on
5 next 100m
6 maxsize UNLIMITED
7 extent management local;
Tablespace created
SQL>
删除表空间:
创建成wedata和wetemp所以删除之前创建的。
DROP TABLESPACE we_data INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE we_temp INCLUDING CONTENTS AND DATAFILES;
再次创建:
SQL> -- 创建表空间
SQL> create tablespace wedata
2 logging
3 datafile '/oracle/oradata/orcl/we/wedata01.dbf'
4 size 1G
5 autoextend on
6 next 100m
7 maxsize UNLIMITED
8 extent management local
9 Segment space management auto ;
Tablespace created
SQL> -- 创建临时表空间
SQL> create temporary tablespace wetemp
2 tempfile '/oracle/oradata/orcl/we/wetemp01.dbf'
3 size 100m
4 autoextend on
5 next 100m
6 maxsize UNLIMITED
7 extent management local;
Tablespace created
SQL>
此时,登录oracle用户可以看到,已经创建好。
[oracle@localhost orcl]$ tree /oracle/oradata/orcl/we
/oracle/oradata/orcl/we
|-- wedata01.dbf
`-- wetemp01.dbf
0 directories, 2 files
[oracle@localhost orcl]$
- 整理一下表空间创建语句:
-- 创建表空间
create tablespace wedata
logging
datafile '/oracle/oradata/orcl/we/wedata01.dbf'
size 1G
autoextend on
next 100m
maxsize UNLIMITED
extent management local
Segment space management auto ;
-- 创建临时表空间
create temporary tablespace wetemp
tempfile '/oracle/oradata/orcl/we/wetemp01.dbf'
size 100m
autoextend on
next 100m
maxsize UNLIMITED
extent management local;
- 分配表空间
上面只是创建了表空间,接下来要进行分配才能被使用。
-- 分配永久表空间
ALTER USER we DEFAULT TABLESPACE wedata;
-- 分配临时表空间
ALTER USER we TEMPORARY TABLESPACE wetemp;
三、PLSQL连接配置
- 安装好连接客户端
C:\Program Files\PLSQL Developer\instantclient_11_2
在这个目录下,创建network和其子目录admin并创建tnsnames.ora文件。

# tnsnames.ora Network Configuration File: C:\instantclient_12_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.189.132)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.localdomain)
)
)
要和服务器上的配置一致。登录服务器去这个目录/oracle/product/11.2.0/db_1/network/admin去查看即可。
[root@localhost admin]# pwd
/oracle/product/11.2.0/db_1/network/admin
[root@localhost admin]# cat tnsnames.ora
# tnsnames.ora Network Configuration File: /oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.localdomain)
)
)
[root@localhost admin]#
- 配置PLSQL
![image]()
配置目录:C:\Program Files\PLSQL Developer\instantclient_11_2
配置OCI库:C:\Program Files\PLSQL Developer\instantclient_11_2\oci.dll
能看到,下面选项就表示配置好了。
![image]()
至此,都配置完成可以使用。下面,我们在java中测试一下效果:
先建spring boot 工程,在maven中,添加数据库驱动,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<scope>runtime</scope>
</dependency>
并且在配置文件,配置一下数据库连接,
spring:
application:
name: my
datasource:
url: jdbc:oracle:thin:@192.168.189.132:1521:ORCL
username: c##scott
password: tiger
driver-class-name: oracle.jdbc.OracleDriver
接着编写一个测试函数:
package com.example.my;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@SpringBootApplication
@RestController
public class MyApplication {
@Autowired
private JdbcTemplate jdbcTemplate;
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@GetMapping("/test")
public List<Map<String, Object>> queryForList() {
String sql = "SELECT * FROM emp";
return jdbcTemplate.queryForList(sql);
}
}
运行,没有报错,就可以了。

可以看到数据,已经返回了:

至此,用于测试的环境,已经搭建成功了。
PS:注意设置一下服务器的时间同步问题:
- 设置NTP时间同步
# 安装时间同步【centos7默认已经安装】
yum -y install chrony
systemctl enable chronyd
systemctl start chronyd
systemctl restart chronyd
# 编辑时间同步
# NTP服务器:
# 210.72.145.44 (国家授时中心服务器IP地址))
# ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址)
# cn.pool.ntp.org
vim /etc/chrony.conf
server 210.72.145.44 iburst
server ntp.sjtu.edu.cn iburst
# 查看时间同步状态
timedatectl status
# 开启网络时间同步
timedatectl set-ntp true
# 查看 ntp_servers
chronyc sources -v
# 查看 ntp_servers 状态
chronyc sourcestats -v
# 查看 ntp_servers 是否在线
chronyc activity -v
# 查看 ntp 详细信息
chronyc tracking -v
# 查看日期时间、时区及 NTP 状态
timedatectl
# 查看时区列表
timedatectl list-timezones
timedatectl list-timezones | grep -E "Asia/S.*"
# 修改时区
timedatectl set-timezone Asia/Shanghai
# 修改日期时间[一般不需要设置]
timedatectl set-time "2021-09-89 15:20:20"
# 开启 NTP
timedatectl set-ntp true/flase
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
- 每天凌晨24点同步时间
crontab -e
0 12 * * * ntpdate cn.pool.ntp.org
- 总结一下关键的设置
# 选定时区
timedatectl set-timezone Asia/Shanghai
# 立即同步
ntpdate cn.pool.ntp.org
# 定时同步
crontab -e
# 每天凌晨12:00就同步时间
0 12 * * * ntpdate cn.pool.ntp.org
- 系统的环境变量设置LC_ALL和LANG以及NLS_DATE_FORMAT:
- vim /etc/profile
export ORACLE_HOME=/oracle/product/11.2.0/db_1 #oracle 数据库路径
export ORACLE_SID=orcl #oracle 启动数据库实例名
export ORACLE_UNQNAME=$ORACLE_SID
export PATH=$ORACLE_HOME/bin:/user/sbin:$PATH #添加系统环境变量
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH #添加系统环境变量
export LC_ALL="en_US"
export LANG="en_US"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
- vim /home/oracle/.bashrc
# Oracle相关环境配置
export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export ORACLE_UNQNAME=$ORACLE_SID
export PATH=$ORACLE_HOME/bin:/user/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
# 设置和服务器一样的编码
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
# 配置地区语言时间
export LC_ALL="en_US"
export LANG="en_US"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
# 设置sqlplus可以使用回退等
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias lsnrctl='rlwrap lsnrctl'
PS:建议尽量都使用英文的环境,减少不必要的问题出现。
本文来自博客园,作者:刘文江,转载请注明原文链接:https://www.cnblogs.com/liuwenjiang/p/18900221





浙公网安备 33010602011771号