数据库这个目录,好像不应该再叫做数据库,而应该称做数据存储或存储架构
其实数据存储说白了就是地方,空间的问题,即东西往哪放
典型的数据存储有关系数据库,k/v存储,内存数据库,依照不同的数据模型。这里可以参照数据库之BDB和sqlite
一篇文章通常是放在一个文件中,以文件系统方式存储
有些东西是以块进行存储的,而非文件系统方式存储。如rsync与mfs好像有点类似,都是传输块的chunk,chunk的,还有svn的数据存储也是很好的样例。
一些结构化的数据可以依照层次放在excel表,也可以放入数据库中,
非结构化数据如图片,歌曲可以放在对像存储里。
数据库设计规范是个技术含量相对低的话题,只需要对标准和规范的坚持即可做到。当系统越来越庞大,严格控制数据库的设计人员,并且有一份规范书供执行参考。在程序框架中,也有一份强制性的约定,当不遵守规范时报错误。
以下20个条款是我从一个超过1000个数据库表的大型ERP系统中提炼出来的设计约定,供参考。
http://docs.oracle.com/en/
http://docs.oracle.com/cd/E11882_01/nav/portal_4.htm
http://www.cnblogs.com/moveofgod/p/3731680.html oracle文档解释
oracle产品
Oracle Application Express (Oracle APEX),
oracle identify directory(OID) 类似于microsoft的ad
http://www.itpub.net/thread-485826-1-1.html 提问的智慧
版oracle路径
安装目录
[oracle@oracle5A ~]$ cd $ORACLE_HOME
[oracle@oracle5A db_1]$ cd dbs 此目录一般有initflt.ora与spfileflt.ora
/5A/oracle/product/11.2.0/db_1/dbs
Oracle备份方式主要分为数据泵导出备份、热备份与冷备份三种,今天首先来实践一下数据泵备份与还原。数据泵导出/导入属于逻辑备份,热备份与冷备份都属于物理备份。oracle10g开始推出了数据泵(expdp/impdp),可以使用并行参数选项,因此,相对于传统的exp命令来说,执行效率更高。
oracle概念
DDL:数据库模式定义语言,关键字:create
DML:数据操纵语言,关键字:Insert、delete、update
DCL:数据库控制语言 ,关键字:grant、remove
DQL:数据库查询语言,关键字:select
SQL Database Manipulation Language(DML) commands update,insert,delete
rigid adj. 严格的;僵硬的,死板的;坚硬的;精确的
predetermined adj. 业已决定的;先已决定的
hindered 阻碍
The preceding database management systems stored data in rigid, predetermined relationships.
Because no data definition language existed, changing the structure of the data was difficult.
Also, these systems lacked a simple query language, which hindered application development.
数据库模式定义语言并非程序设计语言,DDL数据库模式定义语言是SQL语言(结构化程序设计语言)的组成部分。SQL语言包括四种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL)和事务控制语言(TCL)。
几种连接用到的命令形式
1.sqlplus / as sysdba 这是典型的操作系统认证,不需要listener进程
2.sqlplus sys/oracle 这种连接方式只能连接本机数据库,同样不需要listener进程
3.sqlplus sys/oracle@orcl 这种方式需要listener进程处于可用状态。最普遍的通过网络连接。
以上连接方式使用sys用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,普通用户因为是数据库认证,所以数据库必需处于open状态。
Instant Client中不包含tnsping, exp/imp, rman, netca等工具. 如果需要这些工具则需要安装oracle client
Oracle主要版本:
Oracle 8i:i,指Internet,表示此时Oracle公司正式开始进军互联网
Oracle 9i:Oracle 9i和8i相比是非常相似的
Oracle 10g:g,表示网格Grid技术。
Oracle 11g:g,表示网格Grid技术。
Oracle 12c:c,表示云Clond技术。
Oracle Database 11g Express Edition
http://blog.sina.com.cn/s/blog_626a73d80100o9sd.html Orace 9i的标准版&企业版 Oracle 10g标准版&企业版
http://wenku.baidu.com/link?url=idLMNHSwWfbRviP_UfFG4G4Ph65q7Ei5ZOK1dht4aPL-lGCMHYMdFEEG5R3UvXVsEmrYWFWpDipyY_xJOWD3lzvy9_Ms8ywvYpP6I2oze3_ 标准版、企业版、易捷版Oracle区别(11g)中文
为了避免混淆,甲骨文宣布改变Java版本号命名方式:自JDK 5.0起,Java以两种方式发布更新——Limited Update包含新功能和非安全修正,Critical Patch Updates(CPUs)只包含安全修正。甲骨文将继续以这两种方式发布更新,但其版本号将有所改变: Limited Update更新使用的版本号将是20的倍数,而CPU更新采用的版本号将是上一个Limited Update版本号加上五的倍数后的奇数。 举例来说,JDK 7 下一个 Limited Update版本将是7u40,接下来的三个CPU版本号将是 7u45(40+5),7u51(40+2x5后的第一个奇数),7u55(40+3x5),随后发布的Limited Update版本号是7u60,三个CPU版本号分别为7u65、7u71和7u75。
ORACLE自动断开数据库连接解决办法
方法一、直接修改资源配置文件
分三个步骤在sqlplus环境下完成。
第一步,查询资源文件,找到CONNECT_TIME所在的profile名。
select resource_name,profile from dba_profiles;
第二步,用alter命令修改profile中的值;
alter profile MONITORING_PROFILE limit connect_time unlimited;(或跟一个时间值,如1000,单位为分钟)
alter profile MONITORING_PROFILE limit idle_time unlimited;
第三步,用如下命令查看profile中的值;
select resource_name,limit from dba_profiles where profile='MONITORING_PROFILE';
方法二:通过创建资源配置文件并进行用户分配来完成。
分三个步骤在sqlplus环境下完成。[该方法不对其它数据库连接用户产生影响]
第一步,查看并修改resource_limit的状态。 www.2cto.com
SQL>show parameter resource_limit; 如果为FALSE,则将其修改为TRUE,否则配置不会生效:
SQL>alter system set resource_file=true;
第二步,用create profile命令创建一个新的profile文件:
SQL>create profile [profile文件名] limit connect_time unlimited idle_time unlimited;
[示例:create profile test_profile limit connect_time unlimited idle_time unlimited;]
第三步,将这个新的配置文件分配给该用户:
SQL>alter user [user_name,如ROOT_QY] profile [profile文件名];
[示例:alter user root_qy profile test_profile;]
select resource_name,profile from dba_profiles;
select resource_name,limit from dba_profiles where profile='MONITORING_PROFILE';
v$开头的都是视图
http://orclib.sourceforge.net/
OCILIB
Welcome to OCILIB – C and C++ Driver for Oracle website !
OCILIB is an open source and cross platform Oracle Driver that delivers efficient access to Oracle databases.
The OCILIB library :
java程序连接数据库
据我所知,使用jdbc连接上oracle有两种方法:
1、 使用thin连接
由于thin驱动都是纯Java代码,并且使用TCP/IP技术通过java的Socket连接上Oracle数据库,所以thin驱动是与平台无 关的,你无需安装Oracle客户端,只需要下载一个thin驱动的jar包,并且将环境变量中的CLASS_PATH变量中加入thin驱动的路径就可 以了。Thin驱动虽然与平台无关,也无需安装Oracle客户端,但是有一个致命的缺陷就是性能一般,达不到如OCI方式的企业级的要求。另外,如果一 个oracle数据库对应一台主机,可以使用thin连接;如果一个oracle数据库对应四五台主机(集群服务器),使用thin时,需要把 tnsnames.ora文件中的相关数据库的整个连接字符串都拷贝下来,如此才能连接上oracle集群数据库。而这种方法也是和数位同事讨论并 Google了大量资料后才发现的。之前我一直以为thin不支持集群数据库的方式。
然后就是设置连接字符串了。这个是固定的写法,如下所示:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn =DriverManager.getConnection ("jdbc:oracle:thin:@10.87.134.107:1521:ora9","sms" , "zzsms");
在上面的连接字符串中,如果不是集群数据库就在@后直接输入数据库IP地址即可;如果是集群数据库,则需要在@后输入tnsnames.ora文件中有关该数据库的所有描述内容(通常是=后边的所有的内容)。
2、 使用oci连接(Oracle Call Interface)
使用OCI连接数据库是企业级的做法,适应于单个数据库和集群数据库,性能优越,尤其是连接池功能大大提高了应用程序的性能和并发量。唯一的缺点是,若想使用OCI必须要安装Oracle客户端。
安装完Oracle客户端后,里面有个jdbc的文件夹,该文件夹下就包含了OCI驱动和THIN驱动。所以是不需要去网上下载的。这个驱动在 jdbc/lib文件夹下,主要有classes12.jar、nls_charset12.jar等等。其中以12结尾的驱动包适应于jdk1.1以上 的版本。以11结尾的适应于jdk1.1以下的版本。文件名中含有classes的jar包就是驱动程序,文件名中含有nls的jar包是与国际化有关的 类。
找到文件后,就需要把class和nls的jar包的绝对路径加入CLASS_PATH环境变量,否则会报ClassNotFound的异常。
设置环境变量后,就可以直接使用OCI驱动了,不要被“驱动”两个字吓坏了,(驱动就是一个可执行文件和一个连接字符串)。很简单,无非是连接字符串的问题。标准的连接字符串如下所示:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:oci:@xxzc","duansiyuan", "oracle_password");
只要这两行,就可以保证连接到数据库,而这个数据库不管是单个数据库还是集群数据库。其中xxzc就是数据库名,duansiyuan就是用户名,oralce_password就是密码。这种方式和C#中的方式比较类似。
需要注意的问题:
1、oracle_home/jdbc文件夹下有大量的样板代码和帮助文档,里面对如何安装和使用jdbc都有详细的说明,请引起高度重视并耐心阅读。里面有很多知识仅通过自己反复的实践是无法获取的。
2、如果想要高性能,请使用OCI连接,如果不想装Oracle客户端,请使用thin连接。
客户端连接数据库
1.sqlplus远程连接全过程,装3个包,输出库路径,执行连接命令就可以了
[root@84-monitor oracle-instantclient-10.2.0.3_x64]# ll total 34740 -rw-r--r--. 1 root root 34494446 Apr 1 2013 oracle-instantclient-basic-10.2.0.3-1.x86_64.rpm -rw-r--r--. 1 root root 289620 Apr 1 2013 oracle-instantclient-devel-10.2.0.3-1.x86_64.rpm -rw-r--r--. 1 root root 783273 Apr 1 2013 oracle-instantclient-sqlplus-10.2.0.3-1.x86_64.rpm [root@84-monitor oracle-instantclient-10.2.0.3_x64]# rpm -ivh ora* [root@84-monitor oracle-instantclient-10.2.0.3_x64]# cat >>/etc/profile export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client64/lib/ [root@84-monitor oracle-instantclient-10.2.0.3_x64]# sqlplus64 fltdata/flt123@192.168.2.1/man
2.设置plsql dev连接数据库
1.下载两个软件包,plsqldev和32位数据库对应版本的instantclient,oracle 9i以上请选 instantclient-basic-win32-11.xxx的下载包,以下的选instantclient-basic- win32-10.xx下载包。plsqldev只支持32位的oci
2.解压下载下来的instantclient,并在oci.dll目录下新建network\admin\tnsnames.ora
3.设置plsqldev,填入oci.dll路径与instantclient路径即可
http://www.cnblogs.com/dingyingsi/archive/2013/02/26/2933464.html 设置plsql dev连接数据库
http://allroundautomations.swmirror.com/plsqldev714.exe
http://download.oracle.com/otn/nt/instantclient/112010/instantclient-basic-win32-11.2.0.1.0.zip?AuthParam=1412927983_fc15e570042f86f8690b031cc422d821
linux下的sqlplus方向键与历史命令问题解决
默认进入sqlplus后,方向键失效,并且无命令历史
近 来因工作需要业余在学习oracle,发现通过SecureCRT或putty等SSH客户端远程登录Linux下oracle的sqplus时,输错字 符后按Backspace键或Del键删除时,会出现^H或其他乱七八糟的的字符,感觉非常别扭不习惯,虽然可以通过Ctrl+Backspace组合键 实现删除功能,但是严重影响使用效率。google了一番,终于完美解决此问题。总结记录如下,本文是此问题最完整的总结:
一、SecureCRT终端里的解决方法:(不完美)
在SecureCRT终端里,如果要在sqlplus下使用Backspace来删除字符,有两种临时方法。
第一种是使用stty命令重新定义^H,可以在使用sqlplus之前执行stty erase ^H,也可以把这一句放到oracle用户的.bash_profile文件里。
stty命令简介:
Unix或者Linux中有个stty命令,它的作用是打印或更改terminal(终端)的设置。
常用参数:
-a --all 用人类可读表格,打印出所有现有设置
-g --save 用stty可读表格,打印出所有现有设置
--help 帮助
--version 版本
查看当前stty现有设置,如图:
第 二种是使用SecureCRT的设置,在会话属性的Terminal->Emulation->Mapped Keys中,选中Backspace sends delete或Delete sends backspace中的其中一个,并确保另一个不被选中。
另一个问题是bash shell下的sqlplus中使用上下箭头无法显示上下命令,而只是显示^[[A,这个问题可以安装rlwrap这个工具解决!
二、利用rlwrap工具解决方法:(完美)
1、安装rlwrap和readline库
CentOS下可以用EPEL的yum源直接安装,步骤如下:
(1)RHEL/CentOS/SL Linux 6.x 下安装 EPEL6 yum源:
32位系统选择:
# rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm
64位系统选择:
# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
导入key:
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
默认会在/etc/yum.repos.d/下创建epel.repo和epel-testing.repo两个配置文件。
(2)安装rlwrap和readline:
# yum install rlwrap readline readline-devel
其他Linux发行版如果源里没有rlwrap和readline的(如SUSE企业版默认没有这两个包),要分别下载这两个源码包编译安装一下。
# wget ftp://ftp.gnu.org/gnu/readline/readline-6.2.tar.gz
# tar zxvf readline-6.2.tar.gz
# cd readline-6.2/
# ./configure
# make
# make install
# wget http://utopia.knoware.nl/~hlub/rlwrap/rlwrap-0.37.tar.gz
# tar zxvf rlwrap-0.37.tar.gz
# cd rlwrap-0.37/
# ./configure
# make
# make install
(3)设置sqlplus的系统别名:
# vim /home/oracle/.bash_profile
在头部或尾部添加:
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
退出oracle用户再重新登录就ok。现在sqlplus用起来就很爽很习惯了!
安装时所遇到的问题
CentOS 6 X86_64系统通过yum安装32位软件包的方法
http://bbs.linuxtone.org/thread-18726-1-1.html
有两种方法可以借鉴,这里记录一下,留作备忘。
假如你要安装libjpeg的32位版本
1、查询名称
yum search libjpeg.i686
2、一劳永逸的方法,这么做会同时安装32和64位版本。
echo 'multilib_policy=all' >> /etc/yum.conf
安装程序对环境进行检查,由于CentOS的32bit程序包都是i686的,而oracle要求i386,所以此处会失败,忽略即可。点击next
在fedora 22 64位环境下,安装oracle11.2-64,在安装需要包时,下面包都要求32位,但yum库中是i686,oracle要求i386,所以安装不成功。
libaio
libaio-devel
libgcc
libstdc++
unixODBC
unixODBC-devel
compat-libstdc++-33
修改系统资源限制(在root帐号下操作):
编辑系统资源限制配置文件 vi /etc/security/limits.conf,在该文件下添加如下行:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
编辑文件 vi /etc/pam.d/login,添加如下行(11gR1有要求,R2没有要求):
session required /lib64/security/pam_limits.so
session required pam_limits.so
编辑 vi /etc/profile 文件,添加如下行(11gR1有要求,R2没有要求):
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
该配置在用户oracle登录时会立即生效,如果当前 oracle 用户已经登录可退出后重新登录使之生效。
Bash内建了一个限制器"ulimit"。注意任何硬限制都不能设置得太高,因此如果你在/etc/profile或用户的 .bash_profile (用户不能编辑或
删除这些文件)中定义了限制规则,你就能对用户的Bash shell实施限制。这对于缺少PAM支持的LINUX旧发行版本是很有用的。你还必须确保
用户不能改变他们的登录shell。限制的设置与PAM相似。例如:
ulimit –Sc 0
ulimit –Su 100
ulimit –Hu 150