安装Oracle
Linux 查看是否安装 oracle
ps -ef | grep ora
如果没安装
直接用Oracle镜像即可
直接启动即可:
docker run -d --name sath89_oracle-xe-11g -p 1521:1521 04851454491b
04851454491b:这个是镜像id
注意要向外暴漏端口号
在121环境上重新搭建发现的问题:
1.
如果权限不够可以这样启动(让容器拥有root权限):
docker run -d --name xeoracle -p 1522:1521 --privileged 396b3e06a5dc
即使是搭建第二个oracle环境,内部的端口也是1521不要改成别的 ,而是把向外暴露的端口修改成1522
用system登陆用默认密码manager登陆不进去
所以需要修改system用户的密码:
docker exec -it 17064b4e4ce8 bash 进入oracle容器内部
sqlplus / as sysdba 连接oracle
alter user SYSTEM account unlock;解锁用户
alter user SYSTEM identified by manager; 修改用户密码为manager
完成可以登陆了
然后在创建表空间 创建用户 授予用户权限 然后导入数据泵
创建表空间
create tablespace pty logging datafile ‘/u01/app/oracle/oradata/XE/pitaya.dbf’ size 2000m autoextend on next 200m maxsize 20480m extent management local;
create tablespace pty logging datafile ‘/u01/app/oracle/product/11.2.0/xe/pitaya.dbf’ size 2000m autoextend on next 200m maxsize 20480m extent management local;
注意拷贝的出去的分号是不对的 自己改成英文的
这个地方可以登陆system用户之后在navicat中执行
此处疑问:
这个’/u01/app/oracle/oradata/XE/pitaya.dbf’地址是如何查询出来的
临时表空间并没有创建(后面有解释)
创建用户:
create user pitaya identified by 123456 default tablespace pty;
create user boss identified by 123456 default tablespace pty;
然后授予权限:
grant connect,resource to boss;
grant connect,resource to pitaya;
这个授予权限的语句权限太少
用:
grant all privileges to boss;
这个
这样Oracle就创建完毕了
创建完毕之后要启动Oracle:
启动服务,startup
启动监听, lsnrctl start
参考网址:https://www.cnblogs.com/muhehe/p/7944887.html
启动之后就可以登陆
注意查看是否是orcl还是xe不要写错了 可以查看一下:
然后如何进入Oracle容器的内部:
docker ps查看容器id
docker exec -it c44cc2eaff43 bash 进入容器
su - oracle 切换到Oracle用户
sqlplus / as sysdba 管理员用户执行sql
sqlplus usernmae/password
conn pitaya/123456切换链接用户
查询已创建的数据目录:select * from dba_directories;
创建数据目录(数据文件存放目录):create directory testdir as ‘/oradata’
(base) [root@localhost ~]# docker exec -it 17064b4e4ce8 bash
root@17064b4e4ce8:/# su oracle
oracle@17064b4e4ce8:/$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Wed Sep 25 06:25:21 2019
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected.
SQL> exit
Disconnected
oracle@17064b4e4ce8:/$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Wed Sep 25 06:26:22 2019
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> conn hr
Enter password:
ERROR:
ORA-28000: the account is locked
Warning: You are no longer connected to ORACLE.
SQL> conn system
Enter password:
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> conn system
Enter password:
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> conn system
Enter password:
ERROR:
ORA-01017: invalid username/password; logon denied
接下来导入数据泵文件数据::::
注意:数据泵导入要先把本地的数据文件放到容器里面去
(base) [root@localhost ~]# docker exec -it 17064b4e4ce8 bash
root@17064b4e4ce8:/# mkdir oradata
root@17064b4e4ce8:/#
root@17064b4e4ce8:/# su - oracle
oracle@17064b4e4ce8:~$ sqlplus / as sysdba
SQL> create directory testdir as '/oradata';
注意create directory testdir as ‘/oradata’;
这个分号 要自己改过来 改成英文的不然报错:
SQL> create directory testdir as ‘/oradata’
2
而且 create directory testdir as ‘/oradata’;
这个testdir就是资源文件的别名
后面:
impdp BOSS/123456@192.168.2.121:1522/xe DIRECTORY=testdir DUMPFILE=boss.dmp REMAP_SCHEMA=BOSS:BOSS
这个DIRECTORY=的就是testdir
容器里面创建了 资源文件
然后
在向linux上的oracle数据库导入的时候,这个directory目录权限要给 数据库用户,比如 oracle,然后在oracle用户下在赋予只读权限
chown -R name:pwd /usr/local
这个是在oracle容器里面的oracle用户操作的所以报错
报错:
正确应该是:
然后:
把文件复制进去创建的资源文件里面
docker cp 文件 容器id:路径
复制进去之后
就impdp导入文件
impdp BOSS/123456@192.168.2.121:1522/xe DIRECTORY=testdir DUMPFILE=boss.dmp REMAP_SCHEMA=BOSS:BOSS
这个DIRECTORY=testdir 就是挂在的文件地址
DUMPFILE=boss.dmp 这里直接跟文件名即可
REMAP_SCHEMA=BOSS:BOSS 这个就是从BOSS用户导入BOSS用户 一般 DMP文件的文件名就是用户名