1、按照正常步骤安装好数据库后,此时存在一个CDB和一个PDB,通过lsnrctl status命令可以看监听是否正常及是否监听到PDB;
成都创新互联公司自2013年起,先为平山等服务建站,平山等地企业,进行企业商务咨询服务。为平山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
2、数据库起来后,缺省PDB为mount状态,通过执行alter PLUGGABLE database pdb1 open;或者执行alter PLUGGABLE database all open;来打开PDB数据库,通过执行alterPLUGGABLE database pdb1 close;或者alter PLUGGABLE database all close;来关闭PDB数据库;
3、登录PDB,首先必须在TNSNAMES文件中加入如下内容:
pdb1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = THINKED)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = pdb1)
)
)
在设置了以上内容后,可以执行以下命令登录PDB:
$sqlplus sys/xifenfei@pdb1 as sysdba
或者在以sysdba登录CDB后,执行以下命令:
sqlalter session set container=pdb1;
4、创建用户
创建用户默认的是container=all,在cdb中只能创建全局用户(c##开头),会在cdb和所有的pdb中创建该用户(但是pdb中的全局用户需要另外授权才能够在pdb中访问)。在pdb中创建的用户只能为本地用户。
按照以上内容理解一般我们日常使用的业务用户应该是建立在PDB下的。
5、用户授权
用户授权默认情况下是只会给当前container,在cdb中也可以指定container=all,对所有open的pdb且存在该用户都进行授权。
6、修改参数
在ROOT中修改参数,默认情况和指定container=all/current均是所有open的pdb都生效。
通过测试我们发现在独立修改pdb参数之时,其本质是在pdb_spfile$基表中插入或者修改相关记录。
通过对pdb_spfile$基表的分析,证明pdb中不同于root的参数是记录在root的PDB_SPFILE$基表中。整个CDB的工作原理是如果在PDB_SPFILE$中无相关参数记录,则继承cdb的参数文件中的值,如果PDB_SPFILE$中有记录则使用该值覆盖cdb参数文件值。
进一步的,删除pdb_spfile$基表中相应值来进行验证,pdb的参数值会自动继承cdb中的参数。
在oracle 12c中pdb数据库默认是不起来的,下面介绍一下pdb起关的一些常用命令。
默认状态:
SQL show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 PDB2 MOUNTED
全部开启pdb:
SQL alter pluggable database all open;
Pluggable database altered.
全部关闭pdb:
SQL alter pluggable database all close immediate;
Pluggable database altered.
当然也可以对个别pdb库关闭或开启:
SQL alter pluggable database PDB1 close immediate;
Pluggable database altered.
SQL alter pluggable database PDB1 open;
Pluggable database altered.
怎么样让pdb随着instance起来而起来呢?需要写一个TRIGGER来拉动pdb
conn / as sysdba
CREATE TRIGGER open_all_pdb
AFTER STARTUP
ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'alter pluggable database all open';
END open_all_pdb;
/
7、ORACLE 12C的Enterprise Manager Database Express 12c相对于11G和10G的Enterprise Manager,从功能上说确实精简了很多,比如不支持在线查看AWR,不支持在线操作不备份,不支持对SCHEDULER的操作等等,减少了功能的同时也大大的降低了其使用难度,不用向以前以前还需要启动dbconsole,需要配置资料库等等一些繁琐的操作,还经常出现一些莫名其妙的问题不得不重建EM。预测几年之后EM Express的使用人说可能会增加(数据库升级到12C是一个因素,有些人毕竟不会购买GC)。在12C的Express版本中,默认情况下只需要在对应的pdb用户下执行如下操作即可启用EM Express
设置http端口
exec DBMS_XDB_CONFIG.SETHTTPPORT(http_port_number);
设置https端口
exec DBMS_XDB_CONFIG.SETHTTPSPORT(https_port_number);
注意:Each container must use a unique port for EM Express,同时对于有些机器缺省带的IE8,在进行EM登录时会报错,出现不能登录的现象,一般升级到IE9就应该可以正常使用。
内存数据库从范型上可以分为关系型内存数据库和键值型内存数据库。 在实际应用中内存数据库主要是配合oracle或mysql等大型关系数据库使用,关注性能。 作用类似于缓存,并不注重数据完整性和数据一致性。 基于键值型的内存数据库比关系型更加易...
1、准备
1.1 下载 Oracle 12c 安装程序
1.2 解压下载好的两个压缩文件
将两个压缩包解压到同一个目录下,即“database”,然后单击解压目录下的“setup.exe”文件:
2、安装过程
2.1、双击”setup.exe”进行安装
软件会加载并初步校验系统是否可以达到了数据库安装的最低配置,如果达到要求,就会直接加载程序并进行下一步的安装;
2.2 在出现的“配置安全更新”窗口中
取消“我希望通过My Oracle Support接受安全更新”,单击“下一步”:
2.3 安装时请连接网络
当然这里选择跳过更新就可以了,点击“下一步”:
2.4 在“安装选项”窗口中
选择“创建和配置数据库”,单击“下一步”:
2.5 根据介绍选择”桌面类”还是”服务器类”
选择”服务器类”可以进行高级的配置,我这里选择”桌面类”,单击”下一步“:
2.6 创建oracle管理用户
这步是其他版本没有的,这个的作用就可以更安全的管理orcl,主要是防止登录win系统勿删了oracle文件,这里选择第二个”创建新windows用户“,输入用户名和口令,专门管理oracle文件的,单击”下一步“:
注意: 如果选择第一个或则第三个,就会出现这样的情况,导致不能往下进行了:
2.7、在“典型安装”窗口中
选择Oracle的基目录,选择“企业版”和“默认值”并输入统一的密码为:Oracle12c,单击“下一步”:
注意:Oracle为了安全起见,要求密码强度比较高,你输入的密码Oracle认为不能复制,我试过了,即使简单的数字字母组合Oracle也认为是不符合).Oracle建议的标准密码组合为:小写字母+数字+大写字母,这回就合格了,当然字符长度还必须保持着Oracle 12c数据库要求的范围之内。
2.8 在上一步设置好了后,将进行检查
在“执行先决条件检查”窗口中,单击“下一步”:
2.9 在上一步检查没有问题后
会生成安装设置概要信息,可以保持这些设置到本地,方便以后查阅,在这步确认后,单击”安装”,数据库通过这些配置将进行整个的安装过程:
注意:
在安装过程中,最好将杀毒软件,安全卫士什么的都强行关闭,安装成功后重启电脑就可以了.
2.10 在安装过程中
这里是一个漫长的等待过程,切勿不小心关闭了程序,或者断电,电脑重启,可以看下我本机安装时,安装过程的状态:
2.11 安装到创建数据库实例时
“Database Configuration Assistant”界面,特别的长时间等待,大约半个钟头,需耐心等待:
2.12、数据库实例安装成功后,会弹出口令管理,进入口令管理:
选择“口令管理”,查看并修改以下用户:
(1)普通管理员:SYSTEM(密码:Manager123)
(2)超级管理员:SYS(密码:Change_on_install123)
修改完成后,单击“确定”。 这里的口令也是需要符合oracle口令规范的,参考前面设置数据库实例口令设置方式。
2.13、安装完成
会出现如下界面,单击“关闭”即可。
背景:如何实现远程连接服务器上的oracle12c?1、安装一个oracle12c空库,使用oracle12c中集成的oraclepl/sqldeveloper工具实现连接远程服务器上的oracle12c数据库。缺点:太笨重;优点:功能全。2、安装一个oracle12c的client结合pl\sqldeveloper工具,实现连接远程服务器上的oracle12c数据库。缺点:功能不及oracle12c集成工具;优点:轻量级。为了快速安装一个可以实现远程访问oracle的工具,我选择了pl\sqldeveloper+oracle12cclient的方案。下载安装文件:1、下载oracle12cclient:下载地址:由于我所下载pl\sqldeveloper是x86位的版本(貌似也没有x64的版本),所以必须下载装备32-bit版本下载。下载后文件名称为:instantclient-basic-nt-12.1.0.2.0.zip2、下载pl\sqldeveloper工具:(为了方便,我把它上传到自己的网盘,并开放了公共链接。)下载后文件目录(解压无密码):3、下载msvcr100.dll:
备注:上边的版本安装过后,第一次运行会出现缺少msvcr100.dll的错误,这时候把这dll拷贝到c:\windows\system32目录、oracle12cclient安装根目录及pl\sqldeveloper安装根目录。安装:1、复制msvcr100.dll到c:\windo
跟版本无关,所有的oracle中decode用法都一样。
decode()函数简介:
主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);
使用方法:
Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
From talbename
Where …
其中columnname为要选择的table中所定义的column,
·含义解释:
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)的理解如下:
if (条件==值1)
then
return(翻译值1)
elsif (条件==值2)
then
return(翻译值2)
......
elsif (条件==值n)
then
return(翻译值n)
else
return(缺省值)
end if
注:其中缺省值可以是你要选择的column name 本身,也可以是你想定义的其他值,比如Other等;
//窗体成员变量
OracleDependency dep;
OracleConnection conn;
OnChangeEventHandler notifyHandler = new OnChangeEventHandler(OnNotificaton);
//连接DB按钮事件
private void btnConnect_Clicked(object sender, EventArgs e)
{
conn = new OracleConnection("User Id=morven;Password=tr;Data Source=mh");
conn.Open();
}
//注册监听
private void btReg_Click(object sender, EventArgs e)
{
OracleCommand cmd = new OracleCommand("select * from tab_cn", conn);
dep = new OracleDependency(cmd);
//指定Notification是object-based还是query-based,前者表示表(本例中为tab_cn)中任意数据变化时都会发出
//Notification;后者提供更细粒度的Notification,例如可以在前面的sql语句中加上where子句,从而指定
//Notification只针对查询结果里的数据,而不是全表。
dep.QueryBasedNotification = false;
//是否在Notification中包含变化数据对应的RowId
dep.RowidInfo = OracleRowidInfo.Include;
//指定收到Notification后的事件处理方法
dep.OnChange += notifyHandler;
//是否在一次Notification后立即移除此次注册
cmd.Notification.IsNotifiedOnce = false;
//此次注册的超时时间(秒),超过此时间,注册将被自动移除。0表示不超时。
cmd.Notification.Timeout = 0;
//False表示Notification将被存于内存中,True表示存于数据库中,选择True可以保证即便数据库重启之后,消息仍然不会丢失
cmd.Notification.IsPersistent = true;
OracleDataReader odr = cmd.ExecuteReader();
Console.Write("Registration completed. " + DateTime.Now.ToLongTimeString() + Environment.NewLine);
}
//注销监听
private void btUnreg_Click(object sender, RoutedEventArgs e)
{
dep.RemoveRegistration(conn);
Console.Write("Registration Removed. " + DateTime.Now.ToLongTimeString() + Environment.NewLine);
}
//监听处理
static private void OnNotificaton(object src, OracleNotificationEventArgs arg)
{
//可以从arg.Details中获得通知的具体信息,比如变化数据的RowId
DataTable dt = arg.Details;
Console.Write("Notification Received. " + DateTime.Now.ToLongTimeString()+" Changed data(rowid): "+arg.Details.Rows[0]["rowid"].ToString() + Environment.NewLine);
}