docker中oracle数据库创建用户及数据泵操作
前言
oracle数据库对权限的管理是非常严格的,因此对于oracle来说创建新的用户以及导入导出都是相对繁琐些。本文主要介绍通过docker安装oracle容器的基本操作。
一、进入oracle容器并登录
1. 查看oracle容器id或容器名称
docker ps //查看所有启动的容器,查找所要操作的容器
2. docker命令进入容器
命令: docker exec -it [容器名称或容器id] /bin/bash
docker exec -it oracle11g /bin/bash
3.通过sqlplus进入Oracle:
oracle数据库提供默认系统用户
用户:SYS 密码: oracle
用户: system 密码: oracle
sqlplus sys as sysdba //以管理员权限登录
sqlplus system/oracle //已普通用户登录
二. 创建表空间,创建用户,并授权
1. 查询表空间的路径
select name from v$tempfile;
2. 创建表空间
命令: create tablespace [表空间名称] datafile [表空间路径] size 9G;
表空间路径复制上面查出来的路径并修改最后的dbf文件名称即可,注意文件名不要有数字
create tablespace test datafile '/u01/app/oracle/oradata/XE/test.dbf' size 9G;
3. 查看所有表空间,及表空间扩容
新建表空间后可以通过命令查看,还可以针对已有表空间继续挂载dbf文件实现空间扩容
select tablespace_name from dba_tablespaces; //查看表空间名称
alter tablespace test add datafile '/u01/app/oracle/oradata/XE/testadd.dbf' size 5G; //给表空间test扩容
查询表空间容量指标
select b.file_id 文件ID,
b.tablespace_name 表空间,
b.file_name 物理文件名,
b.bytes 总字节数,
(b.bytes-sum(nvl(a.bytes,0))) 已使用,
sum(nvl(a.bytes,0)) 剩余,
sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_name,b.file_id,b.bytes
order by b.tablespace_name;
4. 创建用户
创建用户 临时表空间设为默认的 TEMP
create user root identified by 123456 default tablespace test temporary tablespace TEMP; //创建root用户,设置默认表空间为test
5. 查看用户名
select username from dba_users; //查看用户名
6. 用户授权
给指定用户连接,管理员,导出权限,导入权限,并可以传递权限。(根据需求自己定义权限)
grant connect,dba,exp_full_database,imp_full_database to root with admin option; //给root用户授权
三. 数据泵导入导出
1. Docker数据库文件移动
docker容器与容器、容器与系统之间是互相隔离的,容器内是不能访问系统目录的,因此做数据库导入导出之前需要上传文件到容器内部,docker容器数据移动命令如下:
(1)移动宿主机文件到容器内部
docker cp <宿主机文件路径名> <容器名称>: <容器路径>
(2)移动容器内部文件到宿主机
docker cp <容器名称>: <容器路径> <宿主机文件路径名>
2. 数据泵导入导出
本文介绍impdp expdp命令导入导出功能,其中涉及逻辑目录的使用。
- 查询逻辑目录名称 及 对应的内存地址
select * from dba_directories;
- 创建逻辑目录
该命令不会在操作系统创建真正的目录,最好以system等管理员创建。复制上面查到的逻辑目录地址,修改成一个新的地址用以创建逻辑目录。
create directory test as 'd:\test\dump'; //创建逻辑目录test
- 导入
移动dmp文件到选用的逻辑目录下,本文选用默认逻辑目录 DATA_PUMP_DIR
参数说明:
directory: 选用的逻辑目录名称
dumpfile:要导入的dmp文件名称
//directory: 选用的逻辑目录名称 dumpfile:移动到逻辑目录下的具体dmp文件名,
impdp test/123456@127.0.0.1:1521/xe directory="DATA_PUMP_DIR" dumpfile="test.DMP" full=y;
- 导出
本文选用默认逻辑目录 DATA_PUMP_DIR
参数说明:
schemas: 选择导出的哪个用户的数据
dumpfile: 具体导出的dmp文件名
DIRECTORY: 导出的逻辑目录
expdp test/123456@127.0.0.1:1521/xe schemas=test dumpfile=test.dmp DIRECTORY=DATA_PUMP_DIR;
- 导出后利用docker cp 到导出的逻辑目录的路径下复制