安装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> 

删除表空间:
创建成wedatawetemp所以删除之前创建的。

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文件。
image

# 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);
    }
}

运行,没有报错,就可以了。
image
可以看到数据,已经返回了:
image
至此,用于测试的环境,已经搭建成功了。

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:建议尽量都使用英文的环境,减少不必要的问题出现。

posted @ 2025-05-28 17:03  刘文江  阅读(50)  评论(0)    收藏  举报