下载oracle19c
https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
找到对应版本下载 然后上传到服务器/opt目录下
进入opt目录
下载依赖包:
wget http://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
安装包 yum localinstall 方式 从本机目录安装软件包 并自动安装相关依赖
yum localinstall -y oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
yum localinstall -y oracle-database-ee-19c-1.0-1.x86_64.rpm
安装完成:
总计:6.9 G
安装大小:6.9 G
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : oracle-database-ee-19c-1.0-1.x86_64 1/1
[INFO] Executing post installation scripts...
[INFO] Oracle home installed successfully and ready to be configured.
To configure a sample Oracle Database you can execute the following service configuration script as root: /etc/init.d/oracledb_ORCLCDB-19c configure
验证中 : oracle-database-ee-19c-1.0-1.x86_64 1/1
已安装:
oracle-database-ee-19c.x86_64 0:1.0-1
完毕!
此时 安装完了之后现在只是安装上了oracle软件,但是还没有数据库
我们要创建数据库
在这里创建数据库有两种方式一种是它安装完给的方法执行这个脚本
还有一种是在桌面环境下的终端里执行输入dbca会弹出可视化的安装界面
我们用脚本安装数据
修改配置文件
vim /etc/init.d/oracledb_ORCLCDB-19c
创建并启动oracle实例 等待Oracle数据库执行初始化操作即可
/etc/init.d/oracledb_ORCLCDB-19c configure
增加环境变量
vim /etc/profile.d/oracle19c.sh
# 添加以下内容
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin
export ORACLE_SID=ORCLCDB
#使环境变量生效
source /etc/profile
修改oracle 用户密码
passwd oracle
使用Oracle登录进行相关的处理
su oracle
登入oracle 进行相关操作
sqlplus / as sysdba
查看pdb信息
show pdbs
如果重启服务器 启动oracle服务
SQL> startup
启动监听器
cd $ORACLE_HOME/bin
lsnrctl start
如果报错:
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 30-MAR-2022 14:46:36
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Starting /opt/oracle/product/19c/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
NL-00280: error creating log stream /opt/oracle/product/19c/dbhome_1/network/log/listener.log
NL-00278: cannot open log file
SNL-00016: snlfohd: error opening file
Linux Error: 13: Permission denied
Listener failed to start. See the error message(s) above...
查看目录 /opt/oracle/product/19c/dbhome_1/network/log 是否有权限
修改权限:
chmod -R 777 /opt/oracle/product/19c/dbhome_1/network/log
配置开机自启
需要先修改一下 oracle 的启动脚本配置:
vi /etc/oratab
ORCLCDB:/opt/oracle/product/19c/dbhome_1:N
# 改为
ORCLCDB:/opt/oracle/product/19c/dbhome_1:Y
然后设置一下 数据库的启动命令
vi /usr/bin/oracle.sh
增加的内容为:
#! /bin/bash
# script For oracle19c.service
/opt/oracle/product/19c/dbhome_1/bin/lsnrctl start
/opt/oracle/product/19c/dbhome_1/bin/dbstart /opt/oracle/product/19c/dbhome_1
然后设置这个文件的读写权限
chmod 777 /usr/bin/oracle.sh
设置一个 oracle19c.service
vi /etc/systemd/system/oracle19c.service
# 添加以下内容
[Unit]
Description=Oracle19c
After=syslog.target network.target
[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
Type=oneshot
RemainAfterExit=yes
User=oracle
Environment="ORACLE_HOME=/opt/oracle/product/19c/dbhome_1"
ExecStart=/usr/bin/oracle.sh
[Install]
WantedBy=multi-user.target
设置开机自动启动
systemctl enable oracle19c
重启测试
reboot
systemctl status oracle19c
创建用户:
确保再CDB环境下
select name,cdb from v$database;
建用户
create user C##remote identified by 123456789;
配置权限
SQL> grant connect,resource,create indextype,create job,create sequence,create session,create table,create view,create procedure,unlimited tablespace,insert any table,select any table,update any table,delete any table to C##remote;
删除用户
drop user C##REMOTE cascade;
如果删除报 ORA-01940提示 “无法删除当前已连接用户”
处理方式:
# 先锁定用户 unlock 解锁
alter user C##REMOTE account lock;
# 查询进程号
select saddr,sid,serial#,paddr,username,status from v$session where username = 'C##REMOTE';
# 删除对应的进程
alter system kill session'391,2314';
# 在删除用户
drop user C##REMOTE cascade;
注意:
使用navicat链接
sid 添加 ORCLCDB
权限介绍:
(1)Connect 角色,是授予最终用户的典型权利,最基本的权利,能够连接到ORACLE数据库中
(2)Resource 角色,是授予开发人员的,能在自己的方案中创建表、序列、视图等。
(3)DBA角色,是授予系统管理员的,拥有该角色的用户就能成为系统管理员了,它拥有所有的系统权限。
unlimited tablespace 如果不给此权限 则不能使用表空间报下边的异常
对于普通用户,如果操作表时报错“[Err] ORA-01950: 对表空间 ‘xxx’ 无权限”,需要执行一下语句
alter user c##sl3 quota unlimited on 表空间名;
expdb数据泵方式备份数据
# 创建目录 存储备份文件
mkdir -p /opt/databack/expdp_dmp
# 赋予777权限
chmod -R 777 databack
# 切换oracle用户
su oracle
# 进入oracle
sqlplus / as sysdba
# 创建dmp导出目录
create directory expdp_dmp as '/opt/databack/expdp_dmp'
# 查看是否创建成功
select * from dba_directories
# 为创建的目录赋权限 如果用sysdba账户备份则不需要此步 目录名 to 需要赋值的用户名(比如该用户需要备份自己的数据)
grant read,write on directory expdp_dmp to C##remote;
# 退出sqlplus
exit;
# 执行备份 此账号只能备份自己表空间
expdp C##remote/123456789 directory=expdp_dmp dumpfile=C##remote20220331.dmp logfile=C##remote20170417.log
# 恢复数据
impdp C##remote/123456789 directory=expdp_dmp dumpfile=C##remote20220331.dmp
全库导出 使用system用户操作 需在oracle用户下进行
# 切换oracle用户
su oracle
# 使用 sys用户登录sqlplus 操作
ALTER USER SYSTEM IDENTIFIED BY "123456789";
# 退出 使用system用户登录 测试修改是否成功
sqlplus system/123456789@ORCLCDB
导出可有多种方式 system/123456789@ORCLCDB 登录方式 @ORCLCDB 可以不加
1、“full=y”,全量导出导入数据库
# 全量导出
expdp system/123456789 dumpfile=full.dmp directory=expdp_dmp full=y logfile=full.log
# 全量导入
impdp system/123456789 dumpfile=full.dmp directory=expdp_dmp full=y
2、schemas按用户导出 导入
# 导出schemas
expdp system/123456789 schemas=C##remote dumpfile=C##remote.dmp directory=expdp_dmp logfile=C##remote.log
# 同名用户导入,从用户A导入到用户A
impdp system/123456789 schemas=C##remote dumpfile=C##remote.dmp directory=expdp_dmp logfile=impdp.log;
3、按表空间导出
# 查看当前用户默认表空间
select username,default_tablespace from user_users;
# 查看全部表空间
select tablespace_name from dba_tablespaces;
# 查看全部用户
select username from dba_users;
# 按表空间导出
expdp system/123456789 tablespaces=USERS dumpfile=USERS_tablespace220332.dmp directory=expdp_dmp logfile=USERS220332.log
# 导入表空间
impdp system/123456789 tablespaces=USERS directory=expdp_dmp dumpfile=USERS_tablespace220332.dmp logfile=impdp.log
导出表 多个表用逗号 table1,table2
# 导出表 注意:使用用户账号导出自己的表
expdp C##remote/123456789 tables=USER_TABLE dumpfile=USER_TABLE.dmp directory=expdp_dmp logfile=USER_TABLE.log
# 导入表
impdp C##remote/123456789 tables=USER_TABLE dumpfile=USER_TABLE.dmp directory=expdp_dmp logfile=USER_TABLE.log
从A用户中把表table1和table2导入到B用户中
impdp B/passwd tables=A.table1,A.table2 remap_schema=A:B directory=expdp_dmp dumpfile=expdp.dmp logfile=impdp.log;
追加数据
# table_exists_action:导入对象已存在时执行的操作。有效关键字:SKIP,APPEND,REPLACE和TRUNCATE
impdp system/123456789 directory=expdp_dmp dumpfile=expdp.dmp schemas=system table_exists_action=replace logfile=impdp.log;
并行操作
可以通过 PARALLEL 参数为导出使用一个以上的线程来显著地加速作业。每个线程创建一个单独的转储文件,因此参数 dumpfile 应当拥有和并行度一样多的项目。您可以指定通配符作为文件名,而不是显式地输入各个文件名,例如:
注意:dumpfile 参数拥有一个通配符 %U,它指示文件将按需要创建,格式将为expCASES_nn.dmp,其中nn 从 01 开始,然后按需要向上增加。
# 多线程导出
expdp system/123456789 dumpfile=full_%U.dmp directory=expdp_dmp full=y parallel=4 logfile=full212.log
# 多线程导入
impdp system/123456789 dumpfile=full_%U.dmp directory=expdp_dmp full=y parallel=4 logfile=full212.log
shell脚本 执行定时任务
#!/bin/sh
echo "备份脚本开始启动..."
# 修改服务器编码与oracle一致 防止乱码
export LANG=en_US.UTF-8
export NLS_LANG="AMERICAN_AMERICA".AL32UTF8
# 5天之前日期 用于删除
DELTIME=`date -d "5 days ago" +%Y_%m_%d`
# 今天日期 用于备份
BAKUPPREFIX=`date +%Y_%m_%d_%H_%M_%S`_full
# 设置账号密码
BAKUSER=system
BAKPASS=123456789
DATA_DIR=/opt/databack/expdp_dmp
echo "现在开始进行数据备份..."
expdp $BAKUSER/$BAKPASS dumpfile=$BAKUPPREFIX"%U".dmp directory=expdp_dmp full=y parallel=4 logfile=$BAKUPPREFIX.log
echo "数据备份结束..."
echo "删除备份数据开始..."
rm -rf $DATA_DIR/$DELTIME*.*
echo "删除备份数据结束...$DATA_DIR/$DELTIME*.*"
echo "备份执行完毕..."
配合crontab使用 执行定时任务