学习《Oracle PL/SQL 实例精解》需要安装书中的 student 模式。下面记录了在 Oracle 12c 下创建数据库并安装模式的步骤,环境为基于 Ubuntu 16.04 的 LinuxMint 18 ,有一些坑。
配套文件下载地址:http://www.informit.com/store/oracle-pl-sql-by-example-9780133796780
创建并启动 Listener
1 | su oracle |
如果出现错误:
Oracle Net Services configuration failed. The exit code is 1
在 oracle 用户下,也执行:
1 | sudo xhost + |
弹出后一路下一步创建好 Listener。
创建数据库
由于之前没有 Oracle 相关经验,没有创建数据库的情况下就参照文档对数据库操作,得到了错误:
1 | ORA-01078: failure in processing system parameters |
这里的 SID 是参照教程中设置 ORACLE_SID=SID
引起的。问题在于此时还没有创建数据库,所以告诉我们教程是不能照搬的。
执行 ps -ef|grep pmon
得到结果:
1 | oracle@rainybox ~/StudentSchema $ ps -ef|grep pmon |
首先来创建数据库。
1 | su oracle |
输入数据库名和密码创建数据库。
创建成功点击 Password Management
为 SYS
和 SYSTEM
创建密码。
之后我们再执行 ps -ef|grep pmon
:
1 | oracle@rainybox ~/StudentSchema $ ps -ef|grep pmon |
所以环境变量中的 SID 应该改为 myDb
:
1 | vim ~/.bashrc |
之后即可正确在 sqlplus 中管理数据库。
创建用户
在 oracle
用户下:
1 | sqlplus |
输入管理账户:
1 | Enter user-name: sys/manage as sys/dba |
在 SQL 控制台下输入:
1 | SELECT tablespace_name |
得到:
1 | TABLESPACE_NAME |
根据文档说明,找到的表空间为:
DEFAULT TABLESPACE
,TEMPORARY TABLESPACE
的值为 USERS
, TEMP
。
执行以下语句创建用户:
1 | CREATE USER student IDENTIFIED by learn |
执行后报错:
ORA-65096: invalid common user or role name
查阅资料得知从 oracle 12c 开始创建通用用户用 c##开头:
所以将文档中的用户名改为 c##student
执行:
1 | CREATE USER c##student IDENTIFIED by learn |
成功创建用户。
导入数据
改为以 c##student
用户连接:
1 | GRANT CONNECT, RESOURCE TO c##student; |
验证连接:
1 | CONNECT c##student/learn |
此时导入数据:
1 | @/home/oracle/StudentSchema/createStudent.sql |
导入失败,因为文档中 createStudent.sql 文件后缀为小写,实际文件为大写。并且注意要有执行权限。
1 | chown -R oracle ~/StudentSchema |
更改后执行:
1 | @/home/oracle/StudentSchema/createStudent.SQL |
输出中有报错:
ORA-01950: no privileges on tablespace ‘USERS’
c##student 用户在 users 表空间没有权限,不知之前为何不生效(待复查)。
以 SYSTEM 连接,执行:
1 | GRANT UNLIMITED TABLESPACE TO c##student; |
再次报错:
ORA-02275: such a referential constraint already exists in the table
因为第一次执行后已经在相应位置有数据,所以要执行下载的 sql 脚本 dropStudent.sql
来清除:
1 | @/home/oracle/StudentSchema/dropStudent.sql |
之后就可以成功导入了。
导入书中其它 sql 文件同上。
数据库管理
启动
1 | su oracle |
启动数据库管理控制台:
1 | emctl start dbconsole |
停止
1 | sqlplus '/as sysdba' |
如果有多个数据库应该在启动前指定要启动的 SID:
1 export ORACLE_SID=[DBSID]
安装 SQL Developer
访问 下载页面 下载,Ubuntu 选择其他平台下载。
1 | cd ./sqldeveloper |
第一次启动需要指定 jdk 路径,路径内不能包含 /bin/javac
目录。
查看 jdk 路径:
1 | which javac |
若要从命令行运行,需要创建一个别名:
1 | alias sqld="cd ~/.sqldeveloper && sudo ./sqldeveloper.sh" |
参考资料
- http://installoracle.blogspot.jp/2013/10/linux-how-to-create-and-start-listener.html
- http://installoracle.blogspot.jp/2013/10/linux-oracle-12c-how-to-create-and-run.html
- http://blog.itpub.net/29519108/viewspace-1448890/
- http://blog.csdn.net/dragoo1/article/details/48717061
- http://www.cnblogs.com/siyunianhua/p/4004361.html
- http://www.cnblogs.com/fnng/archive/2012/08/12/2634485.html
- http://blog.csdn.net/bluepb/article/details/7395484
- https://community.oracle.com/thread/2178662
- https://stackoverflow.com/questions/39590782/cannot-use-sqlplus-in-linux