Oracle数据库在服务器端连接心得

Oracle数据库在服务器端连接心得

之前学习Oracle都是在本地安装Oracle11g,然后使用Myeclipse连接,进行网站后台的编写。最近在远程服务器上安装了Oracle12c,再在本地连接远程的数据库,踩了一些坑,于是有了一些心得,趁还没忘赶紧记录在此,或许能帮到更多遇到同样问题的童鞋~

Oracle12c的企业管理器

这次在服务器端安装的数据库版本是Oracle12c,然后想通过浏览器Web端输入URL来访问Oracle的企业管理器,配置服务器时:
1. 安全组的入站规则相关端口(如:1521、5500之类的)都已放通;
2. 也关闭了服务器端的防火墙;
3. 然后在服务器端打开了Oracle相关服务;
4. 通过在本地的cmd使用ping命令可以顺利ping通服务器。
URL格式如下:

https://[你的服务器公网ip]:5500/em

可以看到Oracle的企业管理器登录界面:
Oracle数据库在服务器端连接心得

问题1:登录企业管理器时登不上

我输入了用户名和口令,根据网上查的资料,把“容器”那一栏空着了,然后点击登录,我很确定输入的用户名和密码就是当时安装数据库时设定的密码,可为什么登不上呢?尝试过勾上与去掉勾选“以sysdba身份”登录,可都不行。
于是我在服务器端使用安装Oracle时自带的sqlplus来尝试登录,发现使用system用户并以如下格式可以顺利登录:

[用户名]/[密码]@[数据库名] as sysdba

但使用当时安装数据库时指定的用户名却无法登录。
然后我再次在企业管理器登录界面尝试所有可能的用户名和口令依旧不行。
于是在服务器上先用system账户登录,输入如下SQL语句查看究竟有哪些用户名:

select username from dba_users;

问题2:Oracle12c创建新用户失败

发现居然没有我当初自己指定的那个用户名,于是我决定使用SQL命令重新创建一个用户,格式如下:

create user username identified by password;

但这样的命令居然都报错了,在网上查资料知道了因为Oracle12c与之前的Oracle11g版本不同,用此版本时创建新用户要在用户名前加“C##”,即如下格式:

create user c##username identified by password;
终于新用户创建成功了。

为新创建的用户赋予权限

之前学过Oracle11g所以我知道赋予权限应使用Grant命令,但一条条权限依次赋予实在是有些麻烦,于是我想把尽可能高的权限一次赋给新建的这个用户,赋权命令格式如下:

grant dba to c##username;

(不过直接赋予dba的权限比较高,需慎用)

然后继续尝试连接Oracle企业管理器,不勾dba那个框,然后就连上啦,千辛万苦终于是连上啦!
Oracle数据库在服务器端连接心得

使用本地Myeclipse连接远程服务器端的Oracle12c

按原来Oracle11g的方式连接数据库,却报错ORA-28040,通过查资料得知Oracle 12c的参数

SQLNET.ALLOWED_LOGON_VERSION

默认等于11。当我们使用11g JDBC之前版本的thin驱动连接的时候,就会报错。
解决方案是找到服务器端Oracle12c的安装目录的
\product\12.2.0\dbhome_1\network\admin\sqlnet.ora文件添加一行

SQLNET.ALLOWED_LOGON_VERSION=8
Oracle数据库在服务器端连接心得

重启数据库,重新连接数据库,依旧连不上。

密码丢失

通过网上查资料明白在服务器上能顺利以

sqlplus 用户名/密码@数据库名

的方式连接,是因为以sqlplus / as sysdba方式登录时,采用的是操作系统验证的方式,所以用户名/密码输与不输入是一样的,输对与输错也没有任何关系。

于是怀疑是密码丢失,重新在服务器端配置密码:
sqlplus / as sysdba进去后重新

alter user sys identified by password

后,再在本地的Myeclipse上尝试连接远程Oracle,于是成功啦~
Oracle数据库在服务器端连接心得

在服务器上想操作数据库除了可以用SQLPlus以外,还可以使用Oracle12c自带的Oracle SQL Developer,如下:
Oracle数据库在服务器端连接心得