0.sql
SQL(structured query language)结构查询语句
数据查询:select
DML(data manipulation language) : insert , update , delete…
DDL(data definition language) : create , alter , drop…
事务控制: commit , rollback , savepoint…
/*用第三方工具连接数据库之后,在一个事务没有被提交之前,然后关闭该工具,相当于关闭了这个会话,这时默认执行的是回滚处理*/
/*在没有被提交之前,处于悬浮状态,这时你的会话显示已经更改,但是再开辟一个会话,查看的话,没有修改*/
1.数据库历史
三个阶段:第一阶段:层次数据库;第二阶段:网状数据库;第三阶段:关系数据库。
2.oracle 数据库
前身:sdl
oracle用java写的
3.oracle内部运行原理:
Oracle数据库区(黄色表示区域)是三种文件的名字:数据文件(data files);控制文件(control files) ;重做日志文件(redo log files)。
Redo log files主要是用来恢复
Oracle三种事务处理:提交(commit);回滚(rollback);savepoint
Oracle 实例区(红色表示区域):数据缓冲区;共享池;java池;日志区;若干个进程区
实例中的进程控制是否写数据。
Oracle 启动时会启用Parameter file(参数文件)和 Password file
用户进程通过服务进程来控制实例区和数据库区
实例是通过参数文件来建立的。一个实例一般是只针对一个数据库,除非是做集群的时候,一般情况下实例名和数据库名是一样的。
Oracle 启动时,会启动两个服务,一个是其本身的服务,还有一个是监听服务。Sqlplus登录时不开监听服务,用第三方软件或者是其他PC登录的时候会开监听服务。
4.如何登录别人的数据库
C:\oracle\product\10.2.0\db_2\NETWORK\ADMIN这个目录下
首先,备份tnsnames.ora文件到任意目录(目的是以后改回来的时候方便);
第二步,修改源文件下的tnsname.ora文件;
源文件代码如下:
# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_2\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
LC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ttc-c7c24ccf287)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = lc)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
修改部分如下:
LC =/*LC为数据库名,可以在原文件下直接更改,就直接更改用户名*/
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ttc-c7c24ccf287/*这个是你要连接的用户名的ip,可以更改*/)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = lc/*这个登陆该数据库的时候的用户名*/)
)
)
修改之后的文件保存好之后就直接更改了。
5.通过修改tnsname.ora文件来创建多个数据库,用来直接访问别人的数据库。
tnsname.ora文件源代码如下:
# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_2\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
LC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ttc-c7c24ccf287)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = lc)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
修改之后的文件如下:
# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_2\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
LC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ttc-c7c24ccf287)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = lc)
)
)
LC1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.34.117)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
LC2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.34.118)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
修改之后的文件增加了两个数据库LC1和LC2,LC1指向的数据库是ip地址为10.10.34.117的PC上服务名称为orcl的数据库。同理,可以理解LC2数据库。
当你用诸如PLSQL Developer的第三方软件登陆LC1或者LC2 的数据库时,用户名和密码要用相应的对方PC上登陆数据库时候的用户名和密码。
使用sqlplus连接LC1数据库:sqlplus sys/lc@LC1 as sysdba(LC1数据库登陆名为sys,密码为lc)
使用sqlplus连接LC1数据库普通用户:sqlplus scott/tiger@LC1 .
6.数据库文件存放位置
数据库文件存放在C:\oracle\product\10.2.0\oradata这个文件夹下,这个文件夹下一个文件夹就代表一个数据库,每一个数据库都包含三个物理文件,这三个物理文件就存放在该数据库文件夹下面。
数据库参数文件存放在:C:\oracle\product\10.2.0\db_2\database这个文件夹下,initlc这个是启动参数文件,PWDlc这个是密码参数文件。
7.oracle启动的三个阶段
三个阶段:nomount,mount,open.
--将数据库启动到nomount状态下:startup nomount
该过程主要读参数文件(C:\oracle\product\10.2.0\db_2\database这个文件夹下initlc文件),分配内存,启动后台进程,初始化部分动态性能视图。
--将数据库启动到mount状态:alter database mount
该过程是读参数文件中描述的控制文件(initlc文件中的内容是一个重定向,重定向到一个数据库中的控制文件中),校验控制文件的正确性,将控制文件的内容读到内存中,mount是挂接的意思,是操作系统中的概念。一旦mount之后,就是将一个没有意义的实例和一个数据库发生了联系,mount是读控制文件,读控制文件中的数据文件和日志文件。
--打开数据库:alter database open
该过程读控制文件中描述的数据文件,验证数据文件的一致性,如果不一致,使用日志文件将数据库文件恢复到一致的状态。
8.数据库关闭的四种方式
--shutdown normal
正常关闭数据库,命令执行后实例不允许其他用户再登陆到实例中。等已连接的所有用户都退出后才关闭数据库。
安全关闭,但会等待很长时间。
--shutdown immediate
终止所有用户查询操作,回滚所有用户的更新操作,切断所有用户连接。
--shutdown transational
不允许其他用户再登陆数据库,等待当前事务执行结束后,再执行shutdown immediate操作。
--shutdown abort
不用任何等待直接关闭,关闭的终极手段。