在CentOS7上安装和配置Oracle19c、启动、CDB和PDB切换、基本使用、远程连接、导入dmp数据

一、下载和安装

CentOS7的服务器,用root登录。

1、官方有安装介绍文档,主要是通过rpm安装,步骤大体分为下载安装preinstall包,然后再下载和安装oracle的包。

2、下载preinstall的包,主要是安装一些环境:

curl -o oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
yum -y localinstall oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

3、下载和安装oracle的包,这一步比较麻烦,需要先去官网找到oracle rpm的下载包的地址(有时候需要登录才能下载),然后再服务器上用wget下载,或者下载到本地然后上传到服务器。

# 下载速度还可以,平均可以达到2M/s
wget https://download.oracle.com/otn/linux/oracle19c/190000/oracle-database-ee-19c-1.0-1.x86_64.rpm?AuthParam=1600654336_c2687b2b909c9eaa8e519838b3a703c6
# 用上面地址下载的rpm包名字会有后缀,用mv重新命名一下即可
mv oracle-database-ee-19c-1.0-1.x86_64.rpm?AuthParam=1600654336_c2687b2b909c9eaa8e519838b3a703c6 oracle-database-ee-19c-1.0-1.x86_64.rpm
# 安装
yum install -y oracle-database-ee-19c-1.0-1.x86_64.rpm

二、配置

1、配置的目的就是数据库软件已经安装好了,现在要创建一个实例吧。数据库以及各种文件可以理解成是实打实的物理的文件系统,实例是基于这些文件物理的系统创建出来的一个可以建立逻辑关系的地方,我们建立空间和表都在这个实例上。

# /etc/init.d/oracledb_ORCLCDB-19c这个文件里面写了配置,如果你要自己配置的话,可以从这个文件拷贝一份然后做修改,比如改掉实例的名称SID,或者配置其他参数
# 我们一般复制一份比如叫oracle_configure,把字符集改成UTF8,pdb名字改成我们想要的名字,比如jsrsdb4
# 这里我们就默认配置所以创建是:This script creates a container database (ORCLCDB) with one pluggable database (ORCLPDB1) and configures the listener at the default port (1521).
/etc/init.d/oracledb_ORCLCDB-19c configure
# 这一步需要等待的时间有点长,额,很长,几十分钟差不多吧,服务器配置决定时间长短

安装oracle19c

2、其实在安装实例之前就已经创建了一个oracle用户,在CentOS层面创建的oracle用户

# 一下命令查看CentOS的用户
cat /ect/passwd
# 默认的oracle用户是没有密码的,经常成为漏洞被攻击,所以,设置一个密码
passwd oracle

三、启动

1、 先登录oracle再说

现在需要在服务器端的控制台登录oracle,即用sqlplus工具。但是因为上面我们安装完实例之后有句话是you must change them by connecting to the database using sqlplus / as sysdba as the oracle user,登录后修改管理员密码,就是修改system的密码。这个密码是自动创建的。

首先,我们就执行这个命令sqlplus / as sysdba,这个时候大概率会报错的。因为有几点需要配置,首先,需要保证在oracle用户下使用,其实是环境变量要配置:

# 切换成oracle用户
su oracle
# 家目录下的环境变量配置
vi .bash_profile
# 在文件中添加ORACLE_HOME变量,这个一定要,不然会报错说没有这个变量
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
# 其次是把sqlplus的bin目录放在PATH中,不然找不到sqlplus命令用不了
PATH=...省略...:$ORACLE_HOME/bin
# 添加一个SID,不然提示说SID不正确,这个orclcdb名字就是我们上面configure安装实例步骤里面写的sid名字,对应起来就行
export ORACLE_SID=orclcdb
# 如果找不到sqlplus的目录在哪,用find / -name 'sqlplus'命令找一下
# 最后设置生效
source .bash_profile

2、启动失败无数次的经历

这个时候使用sqlplus / as sysydba就可以登录了。但是登录之后执行任何命令都提示:ORA-01034: ORACLE not available,说明实例根本没启动啊,那登录之后执行startup启动吧,又出现下面这个报错:

SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/opt/oracle/product/19c/dbhome_1/dbs/initorclcdb.ora'

解决方案是查看后确实缺失这个文件,这个文件原来在/opt/oracle/admin/ORCLCDB/pfile/init.ora.820202023293,复制过来即可。如果不知道这个文件位置的可以用find / -name 'pfile'搜索。

cp /opt/oracle/admin/ORCLCDB/pfile/init.ora.820202023293 /opt/oracle/product/19c/dbhome_1/dbs/initoraclcdb.ora
# 在这里最好修改一个最上面的两个参数,一个是nls_language默认SIMPLIFIED CHINESE和nls_territory默认是CHINA,改成下面这样
# 目的是,控制台上显示的都是英文,防止出现中文问号乱码
nls_language = ‘AMERICAN’
nls_territory='AMERICA'

然后再启动,又有报错,这个报错似乎和内存相关:

SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system

出现这个原因就是可用的共享空间/dev/shm太小,小于我们上面/opt/oracle/product/19c/dbhome_1/dbs/initoraclcdb.ora这个文件中的MEMORY_TARGET设置的大小。可以查看一下,比如我们这里查看了一下发现MEMORY_TARGET设置的是700多M,共享空间用下面这个命令查看:df -h可以看到:

[oracle@localhost ~]$ df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 898M     0  898M    0% /dev
# 这里只有178可用了,之前没有启动时还大一些,大概300-400M左右
tmpfs                    910M  732M  178M   81% /dev/shm
tmpfs                    910M  9.6M  901M    2% /run
tmpfs                    910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G   15G  2.1G   88% /
/dev/sda1               1014M  150M  865M   15% /boot
tmpfs                    182M     0  182M    0% /run/user/0

那我们去把MEMORY_TARGET设置的小一点,比如改成300m。然后再使用startup

*如果上面设置了nsl_language的话应该就没有乱码了,否则按照下面这个设置一下字符集。*这时候如果有中文显示问号的问题,那么直接修改.bash_profile添加下面这句,那么显示的就变成英文提示了,不会出现乱码了,记得source .bash_profile

export NLS_LANG=american_america.AL32UTF8

然后,因为经过上面那么多次startup都失败了,所以这个启动命令被玩坏了,什么意思呢?就是我们知道startup其实做了很多事情,启动、挂载和打开数据库文件之类的,可能我们之前的失败只是其中一部分环节失败了,所以我们最终再启动的时候,会发现报这个错误:

ORA-01102: cannot mount database in EXCLUSIVE mode

这意思大概也是说已经启动了,有些文件已经被占用了,不能再用了。这怎么办?重启CentOS吧,reboot命令走起。然后再登录CentOS,使用sqlplus / as sysdba登录,有时候有异常说sqlplus找不到这个命令,检查一下.bash_profile并且source .bash_profile执行一下。这样会发现可以登录了,然后使用startup可以了。

最后,修改密码可以了:

SQL> alter user sys identified by 123456;

四、切换容器和创建表空间和用户、远程连接

我们需要导入的是dmp数据,应该是之前从其他oracle数据库用expdp命令导出的文件。首先要确保字符集是一致的。我们自己安装的字符集在/etc/init.d/oracledb_ORCLCDB-19c里,是UTF8的一个扩展字符集。

# 看看表空间在哪里
select name from v$datafile;
# 创建一个表空间
create tablespace rsrc datafile '/opt/oracle/oradata/ORCLCDB/rsrc.dbf' size 100M reuse autoextend on next 40M maxsize unlimited;
# 根据这个表空间创建用户
create user jsrsadmin identified by 123456 default tablespace rsrc;
# 上面会报错oracle 19 ORA-65096: invalid common user or role name
# 因为cdb上默认创建的用户必须以C##开头,除非你修改前缀或者先创建一个C##开头的然后强制修改
# 但是官方不是这么用的,官方的意思是你可以切换到pdb上然后创建你想要的用户名

# 查看容器,我们在/opt/oracle/product/19c/dbhome_1/dbs/initoraclcdb.ora里其实已经写了pdb的名称
select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
# 切换到pdb上
alter session set container=ORCLPDB1;
# 在创建用户的时候,报错ORA-01109: database not open
# 我们再切换到pdb之后需要启动
SQL> startup
Pluggable Database opened.
# 这时候你创建用户的话,提示你表空间不存在。这是因为我们刚刚切换了pdb,没办法重新再在pdb下创建一次表空间吧,路径有点变化,多了ORCLPDB1/,这个ORCLPDB1就是pdb的名字,根据实际情况改成自己的即可
create tablespace rsrc datafile '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/rsrc.dbf' size 100M reuse autoextend on next 40M maxsize unlimited;
# 成功了
SQL> create user jsrsadmin identified by 123456 default tablespace rsrc;
User created.
# 授权,不授权,没法连接和登录
grant connect,resource,dba to jsrsadmin;
# 不需要更改tnsnames.ora,不需要增加一个pdb的服务和监听
# 连接报没有listener的问题启动一下即可
lsnrctl start
# 接下来就是连接了,注意这个写法,漏掉localhost的话就经常会出错
# 管理员角色登录的话,直接sqlplus / as sysdba
sqlplus /nolog
conn jsrsadmin/123456@localhost/JSRSDB4

用Navicat连接的话,只需要在服务器上开通端口:

firewall-cmd --add-port=1521/tcp --permanent
firewall-cmd --reload

然后用Navicat连接即可:
在这里插入图片描述

五、导入数据

导入的语句正常是这样的:

impdp jsrsadmin/123456@localhost/jsrsdb4 dumpfile=rsrc0830.dmp full=y;
# 这里需要注意的是,需要把恢复的数据放在指定的文件夹里,不然提示找不到文件(从这个提示中就可以知道应该放在哪里)
# 加上路径的话,提示path有问题。所以还是暂时乖乖放在指定目录中吧

# 执行之后,可能是会出现这样的报错
ORA-04031: unable to allocate 13224 bytes of shared memory
# 于是管理员登录查看共享池大小,看shared_pool_size,0肯定不行的,设置一下,然后重启数据库才能生效
SQL> show parameter shared_pool;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
shared_pool_reserved_size	     big integer 4823449
shared_pool_size		     big integer 0
SQL> alter system set shared_pool_size=100M;

System altered.

# 关闭启动,还要切换到pdb去看看有没有启动
shutdown immediate
startup

# 使用上次语句之前,需要检查一下,dmp文件里面涉及到哪些表空间。
# 一般只要创建好空间就好了。
# 不然dmp中创建用户的时候语句都出错,下面创建的表自然全都出错,没法导入。
# 有时候不知道创建哪些表空间的话,就先导入一次,然后看报错。里面有提示哪些表空间不存在。
# 导入报错文件在:/opt/oracle/admin/ORCLCDB/dpdump/import.log
# 创建表空间的语句就是上面提到的:
create tablespace TBSD_XYWSDATA datafile '/opt/oracle/oradata/ORCLCDB/JSRSDB4/TBSD_XYWSDATA.dbf' size 100M reuse autoextend on next 40M maxsize unlimited;
# 我们测试的表空间大概有:RSRC、TBSD_KSDATA、TBSD_RCDATA、TBSD_ZJDATA	、TBSD_RSRCDATA、TBSD_ZJWSDATA、TBSD_KSWSDATA、TBSD_RSWSDATA、TBSD_RSDATA、TBSD_RCWSDATA、TBSD_XYGLDATA、TBSD_XYWSDATA

至此,数据已经导入成功了。

六、配置和导入源数据、数据迁移

(1)在oracle数据库中创建一个单独的表空间和用户放源数据。

create tablespace SZRC datafile '/opt/oracle/oradata/ORCLCDB/JSRSDB4/SZRC.dbf' size 100M reuse autoextend on next 40M maxsize unlimited;
# 其实上面的名称不是很规范,因为你会发现创建的表空间的名称不是SZRC,而是会自动前面多了一个T,叫TSZRC
# 创建用户
create user szrc identified by szrc default tablespace TSZRC;
grant connect,resource,dba to szrc;

(2)需要自建序列号的,可以创建一个,也可以删除,这个序列号好像不能保证一定是连续的,但能保证不重复。

create sequence seq INCREMENT by 1 START WITH 1;

存储过程里面如果涉及到跨用户的表,需要保证当前用户有足够的权限,这个权限不是用过角色来赋予的,而需要直接通过对表的增删改查授权获得的,不然那就报table or view does not exist,授权操作比较简单:

# 以管理员身份登录
# 如果用户是在pdb里面的话,需要切换到pdb容器
alter session set container=你的pdb容器名字,比如JSRSDB4
# 需要操作哪个用户下的哪个表,就授权即可
grant SELECT,INSERT,UPDATE,DELETE on JSRCD_LDRYDA.GC41 to SZRC;

在存储过程里面可以这么使用序列,以及需要注意的点:

# 序列直接使用sql.nextval可以取值
# 表名和字段名需要用双引号,不然提示无效表或字段,或column not allowed here之类的
# varchar2(int)里面的int不一定是字符长度,而是字节长度,中文一般占3个字节,也可能是2个这个根据字符接而定
# 所以如果varchar2是固定字节数的,那么截取的时候不能用substr而是用substrb截图固定字节长度
# 下面是一个示例
CREATE OR REPLACE PROCEDURE testooo as
CURSOR cursorSource IS SELECT * from SZRC."DA_ArchivalStatus";
v_no VARCHAR2(100);
BEGIN
  FOR cur IN cursorSource LOOP
		IF cur."ArrivalConfidentialNo" IS NOT NULL
		THEN
			v_no := cur."ArrivalConfidentialNo";
		ELSE v_no := 'jihaoyao';
		END IF;
		INSERT INTO JSRCD_LDRYDA."GC41"("BGC401", "AAE005", "AAC005", "AAC004", "AAC147", "AAC003", "BGE409", "BGC406", "BGC405", "BGC404", "BGC403", "BGC402") 
		VALUES(seq.nextval, '15999999999', '1', '1', '32050100111111', '王二麻', '1', to_number(to_char(SYSDATE,'yyyymmdd')), '1', '1', SUBSTRB(v_no, 0, 20) , '22');
	END LOOP;
END;
  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装 Oracle 19c 需要以下步骤: 1. 准备系统环境 确保你的系统满足以下要求: - 操作系统:CentOS 7.9 - 内存:至少8GB - 磁盘空间:至少30GB - 其他:必须安装了最新的补丁和软件包 2. 安装必要的软件包 执行以下命令来安装必要的软件包: ``` sudo yum install -y binutils.x86_64 compat-libcap1.x86_64 gcc.x86_64 gcc-c++.x86_64 glibc.i686 glibc.x86_64 glibc-devel.i686 glibc-devel.x86_64 ksh compat-libstdc++-33 libaio.i686 libaio.x86_64 libaio-devel.i686 libaio-devel.x86_64 libgcc.i686 libgcc.x86_64 libstdc++.i686 libstdc++.x86_64 libstdc++-devel.i686 libstdc++-devel.x86_64 libXi.i686 libXi.x86_64 libXtst.i686 libXtst.x86_64 make.x86_64 sysstat.x86_64 ``` 3. 创建用户和组 创建一个名为 `oracle` 的用户和一个名为 `oinstall` 的组: ``` sudo groupadd oinstall sudo groupadd dba sudo useradd -g oinstall -G dba oracle echo "oracle" | sudo passwd --stdin oracle ``` 4. 设置内核参数 编辑 `/etc/sysctl.conf` 文件并添加以下参数: ``` fs.file-max = 6815744 kernel.sem = 250 32000 100 128 kernel.shmmni = 4096 kernel.shmall = 1073741824 kernel.shmmax = 4398046511104 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 net.ipv4.ip_local_port_range = 9000 65500 ``` 保存并退出文件,然后执行以下命令以使更改生效: ``` sudo sysctl -p ``` 5. 设置用户限制 编辑 `/etc/security/limits.conf` 文件并添加以下参数: ``` oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 ``` 6. 安装 Oracle 下载并解压 Oracle 19c 安装文件,然后进入该目录并执行以下命令: ``` sudo su - oracle ./runInstaller ``` 按照提示进行安装,注意选择正确的组和用户。 7. 配置 Oracle 安装完成后,执行以下命令以配置 Oracle: ``` sudo /u01/app/oraInventory/orainstRoot.sh sudo /u01/app/oracle/product/19.0.0/dbhome_1/root.sh ``` 8. 启动 Oracle 执行以下命令以启动 Oracle: ``` sudo systemctl start oracle ``` 9. 验证 Oracle 执行以下命令以验证 Oracle 是否成功安装并正在运行: ``` sqlplus / as sysdba ``` 如果成功连接到数据库,将显示以下信息: ``` SQL*Plus: Release 19.0.0.0.0 - Production on Thu Oct 22 11:04:10 2020 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 ``` 至此,Oracle 19c 安装完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值