Oracle 12c 创建数据库并导入模式

学习《Oracle PL/SQL 实例精解》需要安装书中的 student 模式。下面记录了在 Oracle 12c 下创建数据库并安装模式的步骤,环境为基于 Ubuntu 16.04 的 LinuxMint 18 ,有一些坑。

配套文件下载地址:http://www.informit.com/store/oracle-pl-sql-by-example-9780133796780

创建并启动 Listener

1
2
3
su oracle
cd $ORACLE_HOME/bin
./netca

如果出现错误:

Oracle Net Services configuration failed. The exit code is 1

在 oracle 用户下,也执行:

1
sudo xhost +

弹出后一路下一步创建好 Listener。

创建数据库

由于之前没有 Oracle 相关经验,没有创建数据库的情况下就参照文档对数据库操作,得到了错误:

1
2
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/12/dbhome_1/dbs/initSID.ora'

这里的 SID 是参照教程中设置 ORACLE_SID=SID 引起的。问题在于此时还没有创建数据库,所以告诉我们教程是不能照搬的。

执行 ps -ef|grep pmon 得到结果:

1
2
oracle@rainybox ~/StudentSchema $ ps -ef|grep pmon 
oracle 28536 26128 0 16:18 pts/1 00:00:00 grep --color=auto pmon

首先来创建数据库。

1
2
3
su oracle
cd $ORACLE_HOME/bin
./dbca

输入数据库名和密码创建数据库。

创建成功点击 Password ManagementSYSSYSTEM 创建密码。

之后我们再执行 ps -ef|grep pmon

1
2
3
oracle@rainybox ~/StudentSchema $ ps -ef|grep pmon 
oracle 19824 1 0 14:54 ? 00:00:00 ora_pmon_myDb
oracle 28536 26128 0 16:18 pts/1 00:00:00 grep --color=auto pmon

所以环境变量中的 SID 应该改为 myDb :

1
2
3
vim ~/.bashrc
# 将之前安装过程中的 ORACLE_SID 更改
ORACLE_SID=myDb;

之后即可正确在 sqlplus 中管理数据库。

创建用户

oracle 用户下:

1
sqlplus

输入管理账户:

1
Enter user-name: sys/manage as sys/dba

在 SQL 控制台下输入:

1
2
3
SELECT tablespace_name
FROM dba_tablespaces
ORDER BY tablespace_name;

得到:

1
2
3
4
5
6
7
TABLESPACE_NAME
------------------------------
SYSAUX
SYSTEM
TEMP
UNDOTBS1
USERS

根据文档说明,找到的表空间为:

DEFAULT TABLESPACETEMPORARY TABLESPACE 的值为 USERS , TEMP

执行以下语句创建用户:

1
2
3
CREATE USER student IDENTIFIED by learn
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

执行后报错:

ORA-65096: invalid common user or role name

查阅资料得知从 oracle 12c 开始创建通用用户用 c##开头:

所以将文档中的用户名改为 c##student 执行:

1
2
3
CREATE USER c##student IDENTIFIED by learn
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

成功创建用户。

导入数据

改为以 c##student 用户连接:

1
GRANT CONNECT, RESOURCE TO c##student;

验证连接:

1
2
3
CONNECT c##student/learn
SHOW USER
USER is "C##STUDENT"

此时导入数据:

1
@/home/oracle/StudentSchema/createStudent.sql

导入失败,因为文档中 createStudent.sql 文件后缀为小写,实际文件为大写。并且注意要有执行权限。

1
2
chown -R oracle ~/StudentSchema
chmod -R 777 ~/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
2
3
4
5
su oracle
lsnrctl start # 启动 Listener
sqlplus '/as sysdba'
startup
exit

启动数据库管理控制台:

1
emctl start dbconsole

停止

1
2
3
4
sqlplus '/as sysdba'
shutdown immediate
exit
lsnrctl stop # 停止 Listener

如果有多个数据库应该在启动前指定要启动的 SID:

1
2
> export ORACLE_SID=[DBSID]
>

安装 SQL Developer

访问 下载页面 下载,Ubuntu 选择其他平台下载。

1
2
cd ./sqldeveloper
sudo chmod +x ./sqldeveloper.sh

第一次启动需要指定 jdk 路径,路径内不能包含 /bin/javac 目录。

查看 jdk 路径:

1
which javac

若要从命令行运行,需要创建一个别名:

1
alias sqld="cd ~/.sqldeveloper && sudo ./sqldeveloper.sh"

参考资料

  1. http://installoracle.blogspot.jp/2013/10/linux-how-to-create-and-start-listener.html
  2. http://installoracle.blogspot.jp/2013/10/linux-oracle-12c-how-to-create-and-run.html
  3. http://blog.itpub.net/29519108/viewspace-1448890/
  4. http://blog.csdn.net/dragoo1/article/details/48717061
  5. http://www.cnblogs.com/siyunianhua/p/4004361.html
  6. http://www.cnblogs.com/fnng/archive/2012/08/12/2634485.html
  7. http://blog.csdn.net/bluepb/article/details/7395484
  8. https://community.oracle.com/thread/2178662
  9. https://stackoverflow.com/questions/39590782/cannot-use-sqlplus-in-linux
本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处! © 雨落
  1. 1. 创建并启动 Listener
  2. 2. 创建数据库
  3. 3. 创建用户
  4. 4. 导入数据
  5. 5. 数据库管理
    1. 5.1. 启动
    2. 5.2. 停止
  6. 6. 安装 SQL Developer
  7. 7. 参考资料