当前位置:文档之家› Oracle数据库GO编程-ok

Oracle数据库GO编程-ok

Oracle数据库GO编程-ok
Oracle数据库GO编程-ok

目录

1.ORACLE 的 OCI 接口编程介绍 (4)

2.GO语言中DATABASE/SQL接口说明 (7)

SQL.R EGISTER (7)

DRIVER.D RIVER (8)

DRIVER.C ONN (9)

DRIVER.S TMT (10)

DRIVER.T X (11)

DRIVER.E XECER (11)

DRIVER.R ESULT (12)

DRIVER.R OWS (12)

DRIVER.R OWS A FFECTED (13)

DRIVER.V ALUE (13)

DRIVER.V ALUE C ONVERTER (13)

DRIVER.V ALUER (14)

DATABASE/SQL (14)

3.利用ORACLE OCI 定义DATABASE/SQL接口 (15)

DRIVER.GO (15)

CONN.GO (17)

STATEMENT.GO (20)

ROWS.GO (24)

2

RESULT.GO (26)

TRANSACTION.GO (27)

4.编译说明 (28)

5.应用举例 (29)

后记 (33)

3

1.O racle 的 OCI 接口编程介绍

4

5

6

2.Go语言中database/sql接口说明

Go与PHP不同的地方是Go没有官方提供数据库驱动,而是为开发者开发数据库驱动定义了一些标准接口,开发者可以根据定义的接口来开发相应的数据库驱动,这样做有一个好处,只要按照标准接口开发的代码,以后需要迁移数据库时,不需要任何修改。那么Go都定义了哪些标准接口呢?让我们来详细的分析一下。

sql.Register

这个存在于database/sql的函数是用来注册数据库驱动的,当第三方开发者开发数据库驱动时,都会实现init函数,在init里面会调用这个Register(name string, driver driver.Driver)完成本驱动的注册。

我们来看一下mymysql、sqlite3的驱动里面都是怎么调用的:

//https://https://www.doczj.com/doc/397782792.html,/mattn/go-sqlite3驱动

func init() {

sql.Register("sqlite3", &SQLiteDriver{})

}

//https://https://www.doczj.com/doc/397782792.html,/mikespook/mymysql驱动

// Driver automatically registered in database/sql

var d = Driver{proto: "tcp", raddr: "127.0.0.1:3306"}

func init() {

Register("SET NAMES utf8")

7

sql.Register("mymysql", &d)

}

我们看到第三方数据库驱动都是通过调用这个函数来注册自己的数据库驱动名称以及相应的driver实现。在database/sql内部通过一个map来存储用户定义的相应驱动。

var drivers = make(map[string]driver.Driver)

drivers[name] = driver

因此通过database/sql的注册函数可以同时注册多个数据库驱动,只要不重复。在我们使用database/sql接口和第三方库的时候经常看到如下: import (

"database/sql"

_ "https://www.doczj.com/doc/397782792.html,/mattn/go-sqlite3"

)

新手都会被这个 _ 所迷惑,其实这个就是Go设计的巧妙之处,我们在变量赋值的时候经常看到这个符号,它是用来忽略变量赋值的占位符,那么包引入用到这个符号也是相似的作用,这儿使用 _ 的意思是引入后面的包名而不直接使用这个包中定义的函数,变量等资源,但包在引入的时候会自动调用包的init函数以完成对包的初始化。

driver.Driver

Driver是一个数据库驱动的接口,他定义了一个method: Open(name string),这个方法返回一个数据库的Conn接口。

8

type Driver interface {

Open(name string) (Conn, error)

}

返回的Conn只能用来进行一次goroutine的操作,也就是说不能把这个Conn应用于Go的多个goroutine里面。如下代码会出现错误

...

go goroutineA (Conn) //执行查询操作

go goroutineB (Conn) //执行插入操作

...

上面这样的代码可能会使Go不知道某个操作究竟是由哪个goroutine发起的,从而导致数据混乱,比如可能会把goroutineA里面执行的查询操作的结果返回给goroutineB 从而使B错误地把此结果当成自己执行的插入数据。

第三方驱动都会定义这个函数,它会解析name参数来获取相关数据库的连接信息,解析完成后,它将使用此信息来初始化一个Conn并返回它。

driver.Conn

Conn是一个数据库连接的接口定义,他定义了一系列方法,这个Conn只能应用在一个goroutine里面,不能使用在多个goroutine里面,详情请参考上面的说明。

type Conn interface {

Prepare(query string) (Stmt, error)

Close() error

9

Begin() (Tx, error)

}

Prepare函数返回与当前连接相关的执行Sql语句的准备状态,可以进行查询、删除等操作。

Close函数关闭当前的连接,执行释放连接拥有的资源等清理工作。因为驱动实现了database/sql里面建议的conn pool,所以你不用再去实现缓存conn之类的,这样会容易引起问题。

Begin函数返回一个代表事务处理的Tx,通过它你可以进行查询,更新等操作,或者对事务进行回滚、递交。

driver.Stmt

Stmt是一种准备好的状态,和Conn相关联,而且只能应用于一个goroutine中,不能应用于多个goroutine。

type Stmt interface {

Close() error

NumInput() int

Exec(args []Value) (Result, error)

Query(args []Value) (Rows, error)

}

Close函数关闭当前的链接状态,但是如果当前正在执行query,query 还是有效返回rows数据。

10

NumInput函数返回当前预留参数的个数,当返回>=0时数据库驱动就会智能检查调用者的参数。当数据库驱动包不知道预留参数的时候,返回-1。

Exec函数执行Prepare准备好的sql,传入参数执行update/insert等操作,返回Result数据

Query函数执行Prepare准备好的sql,传入需要的参数执行select操作,返回Rows结果集

driver.Tx

事务处理一般就两个过程,递交或者回滚。数据库驱动里面也只需要实现

这两个函数就可以

type Tx interface {

Commit() error

Rollback() error

}

这两个函数一个用来递交一个事务,一个用来回滚事务。

driver.Execer

这是一个Conn可选择实现的接口

type Execer interface {

Exec(query string, args []Value) (Result, error)

}

如果这个接口没有定义,那么在调用DB.Exec,就会首先调用Prepare返回Stmt,然后执行Stmt的Exec,然后关闭Stmt。

11

driver.Result

这个是执行Update/Insert等操作返回的结果接口定义

type Result interface {

LastInsertId() (int64, error)

RowsAffected() (int64, error)

}

LastInsertId函数返回由数据库执行插入操作得到的自增ID号。RowsAffected函数返回query操作影响的数据条目数。

driver.Rows

Rows是执行查询返回的结果集接口定义

type Rows interface {

Columns() []string

Close() error

Next(dest []Value) error

}

Columns函数返回查询数据库表的字段信息,这个返回的slice和sql查询的字段一一对应,而不是返回整个表的所有字段。

Close函数用来关闭Rows迭代器。

Next函数用来返回下一条数据,把数据赋值给dest。dest里面的元素必须是driver.Value的值除了string,返回的数据里面所有的string都必须要转换成[]byte。如果最后没数据了,Next函数最后返回io.EOF。

12

driver.RowsAffected

RowsAffested其实就是一个int64的别名,但是他实现了Result接口,用来底层实现Result的表示方式

type RowsAffected int64

func (RowsAffected) LastInsertId() (int64, error)

func (v RowsAffected) RowsAffected() (int64, error)

driver.Value

Value其实就是一个空接口,他可以容纳任何的数据

type Value interface{}

drive的Value是驱动必须能够操作的Value,Value要么是nil,要么是下面的任意一种

int64

float64

bool

[]byte

string [*]除了Rows.Next返回的不能是string.

time.Time

driver.ValueConverter

ValueConverter接口定义了如何把一个普通的值转化成driver.Value的接口

13

type ValueConverter interface {

ConvertValue(v interface{}) (Value, error)

}

在开发的数据库驱动包里面实现这个接口的函数在很多地方会使用到,这个ValueConverter有很多好处:

?转化driver.value到数据库表相应的字段,例如int64的数据如何转化成数据库表uint16字段

?把数据库查询结果转化成driver.Value值

?在scan函数里面如何把dirve.Value值转化成用户定义的值driver.Valuer

Valuer接口定义了返回一个driver.Value的方式

type Valuer interface {

Value() (Value, error)

}

很多类型都实现了这个Value方法,用来自身与driver.Value的转化。

通过上面的讲解,你应该对于驱动的开发有了一个基本的了解,一个驱动只要实现了这些接口就能完成增删查改等基本操作了,剩下的就是与相应的数据库进行数据交互等细节问题了,在此不再赘述。

database/sql

database/sql在database/sql/driver提供的接口基础上定义了一些更高阶的方法,用以简化数据库操作,同时内部还建议性地实现一个conn pool。

14

type DB struct {

driver driver.Driver

dsn string

mu sync.Mutex // protects freeConn and closed

freeConn []driver.Conn

closed bool

}

我们可以看到Open函数返回的是DB对象,里面有一个freeConn,它

就是那个简易的连接池。它的实现相当简单或者说简陋,就是当执行

Db.prepare的时候会defer db.putConn(ci, err),也就是把这个连接放入连接池,每次调用conn的时候会先判断freeConn的长度是否大于0,大于0说明有

可以复用的conn,直接拿出来用就是了,如果不大于0,则创建一个conn,然后再返回之。

3.利用Oracle Oci 定义database/sql接口

在https://https://www.doczj.com/doc/397782792.html,/liudch?tab=repositories上我搜集了五种go连

接oracle数据库的oci实现,比较下来,https://https://www.doczj.com/doc/397782792.html,/liudch/goci-1

实现的比较好,这里以此实现来说明接口的设计。

driver.go

package goci

/*

15

#include

#include

#include

#cgo CFLAGS: -I/home/oracle/app/oracle/product/11.2.0/client_1/rdbms/pu blic

#cgo LDFLAGS: -lclntsh -L/home/oracle/app/oracle/product/11.2.0/client_ 1/lib

*/

import "C"

import (

"database/sql"

"database/sql/driver"

"errors"

"unsafe"

)

type drv struct{}

func init() {

sql.Register("goci", &drv{})

}

func (d *drv) Open(dsn string) (driver.Conn, error) {

conn := &connection{}

// initialize the oci environment used for all other oci calls

result := C.OCIEnvCreate((**C.OCIEnv)(unsafe.Pointer(&conn.env)), C. OCI_DEFAULT, nil, nil, nil, nil, 0, nil)

if result != C.OCI_SUCCESS {

return nil, errors.New("Failed: OCIEnvCreate()")

}

// error handle

result = C.OCIHandleAlloc(conn.env, &conn.err, C.OCI_HTYPE_ERROR, 0, nil)

if result != C.OCI_SUCCESS {

return nil, errors.New("Failed: OCIHandleAlloc() - creating err or handle")

}

16

// Log in the user

err := conn.performLogon(dsn)

if err != nil {

return nil, err

}

return conn, nil

}

func ociGetError(err unsafe.Pointer) error {

var errcode C.sb4

var errbuff [512]C.char

C.OCIErrorGet(err, 1, nil, &errcode, (*C.OraText)(unsafe.Pointer(&e rrbuff[0])), 512, C.OCI_HTYPE_ERROR)

s := C.GoString(&errbuff[0])

return errors.New(s)

}

conn.go

package goci

/*

#include

#include

#include

#cgo CFLAGS: -I/home/oracle/app/oracle/product/11.2.0/client_1/rdbms/pu blic

#cgo LDFLAGS: -lclntsh -L/home/oracle/app/oracle/product/11.2.0/client_ 1/lib

*/

import "C"

import (

"database/sql/driver"

"strings"

"unsafe"

)

type connection struct {

env unsafe.Pointer

17

err unsafe.Pointer

svr unsafe.Pointer

}

func (conn *connection) performLogon(dsn string) error {

user, pwd, host := parseDsn(dsn)

puser := C.CString(user)

defer C.free(unsafe.Pointer(puser))

ppwd := C.CString(pwd)

defer C.free(unsafe.Pointer(ppwd))

phost := C.CString(host)

defer C.free(unsafe.Pointer(phost))

result := C.OCILogon2((*C.OCIEnv)(unsafe.Pointer(conn.env)),

(*C.OCIError)(conn.err),

(**C.OCIServer)(unsafe.Pointer(&conn.svr)),

(*C.OraText)(unsafe.Pointer(puser)),

C.ub4(C.strlen(puser)),

(*C.OraText)(unsafe.Pointer(ppwd)),

C.ub4(C.strlen(ppwd)),

(*C.OraText)(unsafe.Pointer(phost)),

C.ub4(C.strlen(phost)),

C.OCI_LOGON2_STMTCACHE)

if result != C.OCI_SUCCESS {

return ociGetError(conn.err)

}

return nil

}

func (conn *connection) exec(cmd string) error {

stmt, err := conn.Prepare(cmd)

if err == nil {

defer stmt.Close()

_, err = stmt.Exec(nil)

}

return err

}

func (conn *connection) Begin() (driver.Tx, error) {

if err := conn.exec("BEGIN"); err != nil {

18

return nil, err

}

return &transaction{conn}, nil

}

func (conn *connection) Prepare(query string) (driver.Stmt, error) {

pquery := C.CString(query)

defer C.free(unsafe.Pointer(pquery))

var stmt unsafe.Pointer

if C.OCIHandleAlloc(conn.env, &stmt, C.OCI_HTYPE_STMT, 0, nil) != C. OCI_SUCCESS {

return nil, ociGetError(conn.err)

}

result := C.OCIStmtPrepare((*C.OCIStmt)(stmt), (*C.OCIError)(conn.e rr),

(*C.OraText)(unsafe.Pointer(pquery)), C.ub4(C.strlen(pquery)),

C.ub4(C.OCI_NTV_SYNTAX), C.ub4(C.OCI_DEFAULT))

if result != C.OCI_SUCCESS {

return nil, ociGetError(conn.err)

}

return &statement{handle: stmt, conn: conn}, nil

}

func (conn *connection) Close() error {

return nil

}

// Makes a lightweight call to the server. A successful result indicate s the server is active. A block indicates the connection may be in use by

// another thread. A failure indicates a communication error.

func (conn *connection) ping() error {

if C.OCIPing((*C.OCIServer)(conn.svr), (*C.OCIError)(conn.err), C.O CI_DEFAULT) != C.OCI_SUCCESS {

return ociGetError(conn.err)

}

return nil

}

// expect the dsn in the format of: user/pwd@host:port/SID

19

func parseDsn(dsn string) (user, pwd, host string) {

tokens := strings.SplitN(dsn, "@", 2)

if len(tokens) > 1 {

host = tokens[1]

}

userpass := strings.SplitN(tokens[0], "/", 2)

if len(userpass) > 1 {

pwd = userpass[1]

}

user = userpass[0]

return

}

statement.go

package goci

/*

#include

#include

#include

#cgo CFLAGS: -I/home/oracle/app/oracle/product/11.2.0/client_1/rdbms/pu blic

#cgo LDFLAGS: -lclntsh -L/home/oracle/app/oracle/product/11.2.0/client_ 1/lib

*/

import "C"

import (

"database/sql/driver"

"fmt"

"log"

"unsafe"

)

type statement struct {

handle unsafe.Pointer

conn *connection

closed bool

}

20

ORACLE数据库安全规范

数据库安全规范

1概述 1.1适用范围 本规范明确了Oracle数据库安全配置方面的基本要求。 1.2符号和缩略语 2 ORACLE安全配置要求 本规范所指的设备为ORACLE数据库。本规范提出的安全配置要求,在未特别说明的情况下,均适用于ORACLE数据库。 本规范从ORACLE数据库的认证授权功能和其它自身安全配置功能提出安全要求。 2.1账号 ORACLE应提供账号管理及认证授权功能,并应满足以下各项要求。 2.1.1按用户分配帐号

2.1.2删除或锁定无关帐号 2.1.3用户权限最小化 要求内容 在数据库权限配置能力内,根据用户的业务需要,配置其所需的最小权

限。

grant 权限 to user name; revoke 权限 from user name; 2、补充操作说明 用第一条命令给用户赋相应的最小权限 用第二条命令收回用户多余的权限 业务测试正常 4、检测操作 业务测试正常 5、补充说明 2.1.4使用ROLE 管理对象的权限 1. 使用Create Role 命令创建角色。 2.使用用Grant 命令将相应的系统、对象或 Role 的权限赋予应用用户。 2、补充操作说明 对应用用户不要赋予 DBA Role 或不必要的权限。 4、检测操作 1.以DBA 用户登陆到 sqlplus 中。 2.通过查询 dba_role_privs 、dba_sys_privs 和 dba_tab_privs 等视图来检查 是否使用ROLE 来管理对象权限。 5、补充说明 操作指南 1、参考配置操作 检测方法 3、判定条件 要求内容 使用数据库角色(ROLE )来管理对象的权限。 操作指南 1、参考配置操作 检测方法 3、判定条件

ORACLE数据库设计规范

1命名原则 1.1约定 u是指对数据库、数据库对象如表、字段、索引、序列、存储过程等的命名约定; U命名使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割 u避免使用Oracle的保留字如LEVEL、关键字如TYPE (见Oracle保留字和关键字); u各表之间相关列名尽量同名; u除数据库名称长度为1 — 8个字符,其余为1 — 30个字符,Database link 名称也不要超过30个字符; u命名只能使用英文字母,数字和下划线; 1.2表名 规则如下: 命名规则为xxx_yyy_TableName 。xxx表示开发公司的名称,最多五个字母构成,尽量用简称;yyy 表示子系统中的子模块的名称(可以没有),最多五个字母构成,尽量用简称;TableName 为表含义,最多十个字母构成,尽量用简称 TableName 规则如下: u使用英文单词或词组作为表名,不得使用汉语拼音 u用名词和名词短语作表名 u不使用复数 正确的命名,例如: fiber_sys_user fiber_biz_order 1.3存储过程 规则如下: 命名规则为xxx_yyy_StoredProcedureName 。xxx表示开发公司的名称,最多五个字母构成,尽量用 简称;yyy表示子系统中的子模块的名称(可以没有),最多五个字母构成,尽量用简称;

StoredProcedureName 规则如下: u用动词或动词短语来命名,并带有宾语 u需要符合用Pascal命名规则。 u尽量谨慎地使用缩写 u尽量不要和关键字重合 u不要用任何名前缀(例如U , B) u StoredProcedureName 内不使用下划线 u当操作依赖条件时,一般结尾使用By+条件 存储过程正确的命名,例如: sys_lnsertUser sys_SearchUserByUserlD sys_DeleteUserByUserlD 1.4视图 规则如下: u视图的命名采用xxx_yyy_ ViewName_v 。xxx表示开发公司的名称,最多五个字母构成,尽量用简称;yyy表示子系统中的子模块的名称(可以没有),最多五个字母构成,尽量用简称;_v后缀表示视图, ViewName 部分表示视图的含义,最多十个字母构成,尽量用简称。 ViewName 规则如下: u用名词和名词短语, u不使用复数 u用Pascal命名规则 u尽量谨慎地使用缩写 u尽量不要和关键字重合 u不要用任何名前缀(例如U,B) u ViewName 中使用下划线 视图正确的命名,例如:

oracle11g数据库管理与开发第7章答案.

第7章安全管理 一、填空题 1.Oracle数据库用户口令认证可以采用数据库验证、外部验证、全局验证等几种方式。 2.Oracle数据库概要文件主要用于资源管理、控制口令等。 3.Oracle数据库中的权限分为系统权限和对象权限两种类型,向用户直接授权需要grant权限to用户SQL语句。 4.用户连接Oracle数据库后希望得到角色权限,这有两种实现方法:一种方法是让管理员把角色设置为用户默认角色,另一种方法是向用户授予角色,需调用的SQL语句是grant 角色to用户。 二、简答题 1.简要说明在oracle数据库内普通用户口令认证和管理员口令认证都有哪些方法? 答:oracle数据库普通用户口令认证有以下3种认证方法: (1)数据库认证(2)外部认证(3)全局认证 管理员口令认证有以下3种认证方法: (1)口令文件认证(2)操作系统认证(3)基于网络认证服务认证 2.简述用户通过默认角色和非默认角色获得权限有何异同? 答:用户通过默认角色获得权限时,用户默认角色在用户连接后被自动激活,所以用户不用显式启用角色就可以立即获得它们所具有的权限。而通过非默认角色获得权限时,必须通过命令调用为其授权,才能使非默认角色获权。 三、实训题 1.请创建一个用户books_pub,要求他第一次登录时必须修改口令,将其默认表空间和默认临时表空间分别设置为books_pub和temp,并在表空间users,demots和books_pub上分别为他分配10MB,10MB和50MB的存储空间。 create tablespace books_pub//创建books_pub表 datafile'f:\app\administrator\admin\orcl\hcy_1.dbf'size5M; create tablespace demots//创建demots表 datafile'f:\app\administrator\admin\orcl\hcy_2.dbf'size5M; create user books_pub//创建books_pub用户 identified by123 password expire default tablespace books_pub temporary tablespace temp quota10M on users quota10M on demots quota50M on books_pub; 2.把创建会话的系统权限,以及scott用户dept表和emp表上的所有对象授予用户books_pub。

Oracle数据库设计规范建议

Oracle数据库设计规范建议 1 目的 本规范的主要目的是希望规范数据库设计,尽量提前避免由于数据库设计不当而产生的麻烦;同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好的保证。 数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。 2 适用范围 本规范的适用人员范围包括我司的所有应用开发人员以及在我司承接数据库应用开发的软件人员。 本规范的适用IT范围包括数据库对象的命名规范、设计原则、SQL语句的设计和使用、SQL语句的性能优化建议、其他与性能有关的设计原则以及设计工具的选择。 3 数据对象的命名规范 3.1 通用规范 3.1.1 使用英文:要用简单明了的英文单词,不要用拼音,特别是拼音缩写。主要目的很明确,让人容易明白这个对象是做什么用的; 3.1.2 一律大写,特别是表名:有些数据库,表的命名乃至其他数据对象的命名是大小写敏感的,为了避免不必要的麻烦,并且尊重通常的习惯,最好一律用大写; 3.2 数据库对象命名规范 3.2.1 表的命名 3.2.1.1 表名的前缀:前缀_表名_T。为表的名称增加一个或者多个前缀,前缀名不要太长,可以用缩写,最好用下划线与后面的单词分开;其目的有这样几个:3.2.1.1.1 为了不与其他项目或者其他系统、子系统的表重名; 3.2.1.1.2 表示某种从属关系,比如表明是属于某个子系统、某个模块或者某个项目等等。表示这种从属关系的一个主要目的是,从表名能够大概知道如何去找相关的人员。比如以子系统为前缀的,当看到这个表的时候,就知道有问题可以去找该子系统的开发和使用人员; 3.2.2 视图命名:相关表名_V(或者根据需要另取名字); 3.2.3 程序包命名:程序包名_PKG(用英文表达程序包意义); 3.2.4 存储过程命名:存储过程名_PRO(用英文表达存储过程意义);

Oracle数据库开发规范

项目编号:××× xxx Oracle数据库开发规范 Oracle DB Development Standardization <部门名称> **年**月**日 文档信息: 文档名称: 文档编号: 文档版本日期: 起草人: 起草日期: 复审人: 复审日期: 版本历史: 版本 日期 作者 更改参考 说明

审批信息: 签字/日期 审核 审批 目录 1 概述 4 1.1 编写目的 4 1.2 文档约定 4 1.3 预期的读者和阅读建议 4 1.4 参考文献 5 2 数据库对象命名 6 2.1 命名总体原则 6 2.2 表名 6 2.3 视图 6 2.4 同义词 6 2.5 序列7 2.6 索引7 2.7 存储过程7 2.8 存储函数8 2.9 存储程序包8 2.10 触发器8 2.11 字段8 2.12 其他9 3 设计规范9 3.1 范围9 3.2 表空间9 3.3 字符集10 3.4 主外键约束10 3.5 分区表10 3.6 RAC下的序列设计10 3.7 字段10 3.8 表结构设计11 3.9 索引设计11 3.10 临时表11 4 SQL编写规范 12 4.1 书写规范12 4.2 SQL语句的索引使用13 4.3 SQL语句降低系统负荷 15 5 PL/SQL编程规范18

5.1 书写规范18 5.2 常用数据库操作语句编码规范19 5.3 常用过程控制结构20 5.4 Condition 21 5.5 Cursor 22 5.6 变量定义与赋值22 5.7 过程与函数调用23 5.8 例外处理(Exception) 23 5.9 例外处理的错误消息24 5.10 注释(Comment) 25 5.11 应用调试控制27 5.12 并发控制27 5.13 代码测试、维护29 1 概述 1.1 编写目的 为规范软件开发人员的Oracle数据库开发提供参考依据和统一标准。 1.2 文档约定 说明本文档中所用到的专用术语定义或解释,缩略词定义。 1.3 预期的读者和阅读建议 本文档适用于所有开发员。 1.4 参考文献 列出有关的参考文件,如: a.属于本项目的其他已发表文件; b.本文件中各处引用的文档资料。 列出这些文件的标题、作者,说明能够得到这些文件资料的来源。 2 数据库对象命名 2.1 命名总体原则 本规范所涉及数据库对象主要是指表、视图、同义词、索引、序列、存储过程、函数、触发器等; 命名应使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割;避免使用Oracle的保留字或关键字,如LEVEL和TYPE; 各表之间相关列名尽量同名; 除数据库模式对象名称长度为1-8个字符,其余对象名称均要求不超过30个字符; 命名只能使用大写英文字母,数字和下划线,且以英文字母开头。 2.2 表名 规则:XXX_MMM_DDDD 说明:XXX代表子系统或模块名称(2-3个字母构成); MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有); DDDD为表的简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音。 示例:PO_HEADERS_ALL 2.3 视图 规则:XXX_MMM_DDDD_V 说明:XXX代表子系统或模块名称(2-3个字母构成);

ORACLE数据库学习心得

ORACLE数据库结课论文 一个好的程序,必然联系着一个庞大的数据库网路... 今年我们学习了oracle数据库这门课程,起初的我,对这个字眼是要多陌生有多陌生,后来上课的时候听一会老师讲课,偶尔再跟上上机课,渐渐的学会了不少东西,但我感觉,我学到的仍是一些皮毛而已,怀着疑惑和求知的心态,我在网上搜索了关于oracle数据库的一些知识。 1.ORACLE的特点: 可移植性ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它数据库文件的间接方法。 可联结性对于不同通信协议,不同机型及不同操作系统组成的网络也可以运行ORAˉCLE数据库产品。 2.ORACLE的总体结构 (1)ORACLE的文件结构一个ORACLE数据库系统包括以下5类文件:ORACLE RDBMS的代码文件。 数据文件一个数据库可有一个或多个数据文件,每个数据文件可以存有一个或多个表、视图、索引等信息。 日志文件须有两个或两个以上,用来记录所有数据库的变化,

用于数据库的恢复。控制文件可以有备份,采用多个备份控制文件是为了防止控制文件的损坏。参数文件含有数据库例程起时所需的配置参数。 (2)ORACLE的内存结构一个ORACLE例程拥有一个系统全程区(SGA)和一组程序全程区(PGA)。 SGA(System Global Area)包括数据库缓冲区、日志缓冲区及共享区域。 PGA(Program Global Area)是每一个Server进程有一个。一个Server进程起动时,就为其分配一个PGA区,以存放数据及控制信息。 (3)ORACLE的进程结构ORACLE包括三类进程: ①用户进程用来执行用户应用程序的。 ②服务进程处理与之相连的一组用户进程的请求。 ③后台进程ORACLE为每一个数据库例程创建一组后台进程,它为所有的用户进程服务,其中包括: DBWR(Database Writer)进程,负责把已修改的数据块从数据库缓冲区写到数据库中。LGWR(Log Writer)进程,负责把日志从SGA中的缓冲区中写到日志文件中。 SMON(System Moniter)进程,该进程有规律地扫描SAG进程信息,注销失败的数据库例程,回收不再使用的内存空间。PMON (Process Moniter)进程,当一用户进程异常结束时,该进程负责恢复未完成的事务,注销失败的用户进程,释放用户进程占用的资源。

北语 18春《Oracle数据库开发》

18春《Oracle数据库开发》作业_1 一、单选题( 每题4分, 共10道小题, 总分值40分) 1.在Oracle中,关于PL/SQL下列描述正确的是() A. PL/SQL代表Power Language/SQL B. PL/SQL不支持面向对象编程 C. PL/SQL块包括声明部分、可执行部分和异常处理部分 D. PL/SQL提供的四种内置数据类型是character,integer,float,boolean 答案:C 2.当需要删除表,且该表具有外键约束,需要删除表及其外键约束,可以使用如下()类型的SQL语句。 A. DROP TABLE table1 B. DROP TABLE tablel with foreign key C. DROP TABLE tablel1 CASCADE CONSTRAINTS D. DROP TABLE table1 all 答案:C 3.为了启动Oracle数据库实例,Oracle必须读取一个()文件,该文件保存了实例和数据库的配置参数列表。 A. 控制文件 B. 数据文件 C. 参数文件 D. 初始化文件 答案:C 4.()实现了JDBC ResultSet中的所有方法,但与ResultSet不同的是,OracleCachedRowSet 中的数据在Connection关闭后仍然有效。 A. OracleCachedRowSet B. OracleRowSet C. OracleSet D. CachedRowSet 答案:A 5.假设需要给某个客户表Customer的Customer_name列添加注释信息:客户姓名,可以使用如下()方式 A. COMMENT ON TABLE?CUSTOMER?IS?'客户姓名' B. COMMENT ON COLUMN CUSTOMER.CUSTOMER_NAME IS '客户姓名' C. COMMENT ON COLUMN CUSTOMER.CUSTOMER_NAME '客户姓名' D. COMMENT ON COLUMN CUSTOMER.CUSTOMER_NAME '客户姓名' 答案:B

北语20秋《Oracle数据库开发》作业1【标准答案】

20秋《Oracle数据库开发》作业1 试卷总分:100 得分:100 一、单选题 (共 9 道试题,共 36 分) 1.Orcacle提供了(),用于支持采用向导方式创建数据库。 A.SQL*Plus B.Oracle Net C.Oracle Listner D.Oracle Database Configuration Assistant。 答案:D 2.可以自动执行操作的存储对象是() A.程序包。 B.函数。 C.过程。 D.触发器 答案:D 3.在Oracle中,约束可以在DML语句执行之后立即生效,也可以延迟到事务处理提交时才生效。()语句可以让用户在事务处理中设置延迟约束的强制模式 A.set constraint B.set transaction C.take constraint D.take constraint 答案:A 4.Oracle的分区表可以包括多个分区,每个分区都是一个独立的(),可以存放到不同的表空间中。 A.段。 B.盘区。 C.物化视图。 D.数据文件 答案:A 5.初始化参数()指定了实例启动时希望创建的共享服务器进程的数目 A.SHARED_SERVICES。 B.DISPATCHERS。 C.HOST。 https://www.doczj.com/doc/397782792.html,_SERVICES 答案:A 6.假设需要格式化作者表AUTHOR查询的列信息,将AUTHOR_ID列名字格式化为“作者编号”,AUTHOR_ID列名字格式化为“作者名称”,AUTHOR_DESC列名字格式化为“作者简介”,可以使用如下()方式 A.FORMAT AUTHOR_ID HEADING ’作者编号’FORMAT AUTHOR_NAME HEADING ’作者名称’FORMAT

Oracle数据库设计策略及规范

Oracle数据库设计策略及规范 设计策略及规范 1. 目的 定义Oracle数据库设计规范,作为数据库规划、设计、开发以及维护人员的技术参考资料。用以规范和指导相关人员的设计行为。 2. 概述 本文档根据Oracle数据库性能特点,描述对表、视图、存储过程、对象命名等方面的设计规范。 3. 基本策略 3.1 设计策略 ◆?分类拆分数据量大的表。 对于经常使用的表(如某些参数表或代码对照表),由于其使用频率很高,要尽量减少表中的记录数量。例如,银行的户主账表原来设计成一张表,虽然可以方便程序的设计与维护,但经过分析发现,由于数据量太大,会影响数据的迅速定位。如果将户主账表分别设计为活期户主账、定期户主账及对公户主账等,则可以大大提高查询效率。 ◆?分区策略 在拥有数500行以上的表时,采用分区策略。 ◆?索引设计。 对于大的数据库表,合理的索引能够提高整个数据库的操作效率。在索引设计中,索引字段应挑选重复值较少的字段;在对建有复合索引的字段进行检索时,应注意按照复合索引字段建立的顺序进行。例如,如果对一个5万多条记录的流水表以日期和流水号为序建立复合索引,由于在该表中日期的重复值接近整个表的记录数,用流水号进行查询所用的时间接近3秒;而如果以流水号为索引字段建立索引进行相同的查询,所用时间不到1秒。因此在大型数据库设计中,只有进行合理的索引字段选择,才能有效提高整个数据库的操作效率。 ◆?有时候为了提高性能。减少表的关联,恰当的数据冗余是允许的。 ◆?索引对新增,删除,更新的性能影响比较大,对相关的表的索引使用要权衡 ◆?为表和索引建立不同的表空间,禁止在系统表空间中放入非核心oracle系统成分的对象,确保数据表空间和索引表空间位于不同的磁盘磁盘驱动器上。 ◆?对于经常发生同时查询或频繁查询的表,最好把他放到不同的磁盘空间上 4. 逻辑设计规范 4.1 范式 ◆?如果没有性能上的原因,应该使用关系数据库理论,达到较高的范式,避免数据冗余。 ◆?如果在数据量上与性能上无特别要求,考虑到实现的方便性可以有适当的数据冗余,但基本上要达到3NF。 4.2 表设计 ◆?对于数据量比较大的表,根据表数据的属性进行分区,以得到较好的性能。如果表按某些字段进行增长,则采用按字段值范围进行范围分区;如果表按某个字段 的几个关键值进行分布,则采用列表分区;对于静态表,则采用Hash分区或列表分区;在范围分区中,如果数据按某关键字段均衡分布,则采用子分区的复合分区方法。 ◆?每个表均创建类型为Sequence的主键字段。 4.3 索引设计 ◆?常规OLTP应用,创建B-TREE索引,不创建位图索引。 ◆?不需要为小型数据表(<5000)创建索引。 ◆?给单个表创建的索引不超过5个,特别是海量交易类表。 ◆?索引条件查询结果记录,不超总记录的20%。 ◆?不要给固定选项的字段创建独立索引。 如只有‘男,女’的性别字段;‘是,否’的状态字段等,不要创建独立索引,位可以建立复合索引。 ◆?对于复合索引,索引字段顺序比较关键,把查询频率比较高的字段排在索引组合的最前面。 ◆?索引放到独立的表空间,该表空间不需要REDO LOG。 ◆?含有外键约束的表的字段,必须有单独索引。如订单明细的表头外键。 5. 对象命名规范 5.1 一般规范 5.1.1 语言 ◆?命名使用英文单词,不使用复数。 ◆?英文单词使用同对象本身意义相对或相近的单词。选择最简单或最通用的单词。不能使用毫不相干的单词来命名。 ◆?当一个单词不能表达对象含义时,用词组组合,如果组合太长时,采用简写或缩写,缩写要基本能表达原单词的意义。 ◆?当出现对象名重名时,是不同类型对象时,加类型前缀或后缀以示区别。 ◆?禁止使用中文或拼音缩写进行命名

Oracle11g数据库基础教程-参考答案资料

第1章Oracle 11g数据库安装与配置 1.简答题 (1) 企业版数据库服务器包含所有的数据库组件,主要针对高端的应用环境,适用于安全性和性能要求较高的联机事务处理(OLTP)、查询密集型的数据仓库和要求较高的Internet应用程序:标准版数据库服务器提供大部分核心的数据库功能和特性,适合于工作组或部门级的应用程序:个人版数据库服务器只提供基本数据库管理功能和特性,适合单用户的开发环境,为用户提供开发测试平台。 (2) 常用数据库类型包括事务处理类、数据仓库类以通用类型。其中事务处理类型主要针对 具有大量并发用户连接,并且用户主要执行简单事务处理的应用环境。事务处理数据库的典型应用有银行系统数据库、Internet电子商务数据库、证券交易系统数据库等。对于需要较 高的可用性和事务处理性能、存在大量用户并行访问相同数据以及需要较高恢复性能的数据 库环境,事务处理类型的配置可以提供最佳性能;数据仓库类型的数据库主要针对有大量的 对某个主题进行复杂查询的应用环境。数据仓库的典型应用有客户订单研究、支持呼叫、销售预测、采购模式以及其他战略性业务问题的历史数据研究。对于需要对大量数据进行快速 访问,以及复杂查询的数据库环境,数据仓库类型配置是最佳选择;通用类型配置的数据库是事务处理数据库与数据仓库配置的折衷方案。既可以支持大量并发用户的事务处理,又可以快速对大量历史数据进行复杂的数据扫描和处理。 (3) 数据库名可以由字母、数字、下划线(_)、#和美元符号($)组成,且必须以字母开头,长度不超过30个字符。在单机环境中,可以不设置域名,域名长度不能超过128个字符。Oracle服务标识符(SID)是一个Oracle实例的唯一名称标识,长度不能超过12个字符。(4) OracleServiceORCL:数据库服务(数据库实例),是Oracle核心服务,是数据库启 动的基础,只有该服务启动,Oracle数据库才能正常启动。(必须启动) OracleOraDb11g_home1TNSListener:监听器服务,该服务只有在远程访问数据库时 才需要(无论远程计算机还是本地计算机,凡是通过Oracle Net网络协议连接数据 库都属于远程访问)。(必须启动) OracleOraDb11g_home1ConfigurationManager:配置Oracle启动时的参数的服务。(非必须启动) OracleOraDb11g_home1ClrAgent:提供对.NET支持的Oracle数据库扩展服务。(非必须启动) OracleJobSchedulerORCL:数据库作业调度服务。(非必须启动) OracleDBConsoleorcl:Oracle控制台服务,即企业管理器服务。只有该服务启动了, 才可以使用Web方式的企业管理器管理数据库。(非必须启动) OracleVssWriterORCL:是Oracle对VSS提供支持的服务。(非必须启动) OracleMTSRecoveryService:是允许数据库充当一个微软事务服务器、COM/COM+对象和分布式环境下的事务资源管理器的服务。

(完整版)Oracle数据库规划设计和运行维护方案

Oracle数据库规划设计和运行维护方案 (V1.0)

目录 1. 前言 (7) 1.1. 编写目的 (7) 1.2. 方案说明 (7) 1.3. 预期读者 (8) 2. 数据库部署模式 (8) 2.1. 单机模式 (8) 2.2. 双机热备模式(HA模式) (8) 2.3. 集群模式(RAC) (9) 2.4. 主从模式(DataGuard) (10) 2.5. 混合模式(DataGrard+RAC) (11) 2.6. 数据库运行模式选择 (11) 3. 系统特点和数据库类型 (12) 3.1. 业务系统的特点 (12) 3.1.1. OLTP特点 (12) 3.1.2. OLAP特点 (13) 3.2. 数据库的规模 (13) 3.3. 数据库版本建议 (14) 4. 数据库运行环境规划 (14) 4.1. 主机规划 (14) 4.2. 网络规划 (15) 4.3. 存储规划 (17) 5. 数据库安装部署规划 (18) 5.1. 软件安装路径 (18) 5.2. 表空间设计 (19) 5.2.1. 业务数据量估算 (19) 5.2.2. 表空间使用规则 (20) 5.2.3. 表空间的概念和分配原则 (24) 5.2.4. 表空间的参数配置 (25) 5.2.5. Undo/temp表空间的估算 (29) 5.2.6. 表的参数设置 (29) 5.2.7. 索引的使用原则 (30) 5.3. 文件设计 (31) 5.3.1. RAC配置文件 (31) 5.3.2. 参数文件 (31) 5.3.3. 控制文件 (32) 5.3.4. 重做日志文件 (33) 6. 数据库应用规划 (35) 6.1. 数据库用户设计 (35) 6.1.1. 用户权限规划 (35) 6.1.2. 用户安全实现 (37) 6.1.3. 用户类型及角色命名规范 (39) 6.2. 数据库分区 (41)

oracle数据库命名规范

竭诚为您提供优质文档/双击可除oracle数据库命名规范 篇一:oracle数据库管理脚本命名规范 oracle資料庫管理腳本命名規範 oracle中的数据字典是数据库中的非常重要的一部分,提供了相关数据库的信息,它是所有oracle用户(从应用 的最终用户、应用的设计开发者到数据库管理员)的非常重要的信息来源。数据字典的创建,是在oracle数据库创建 完毕后,运行一些相关的数据库管理脚本来完成的。当采用oracle统一安装器(oracleuniversalinstaller)创建数据库时,oracle服务器有关的字典视图和脚本最后会被自动安装。但当需要升级目前的oracle数据库服务器时,数据库 管理员必须要手工重新运行创建这些视图或脚本的sql。安 装完数据库后,oracle数据库管理脚本就存放在操作系统中。对于unix和nt操作系统,分别位于不同的物理目录下,见表1所示: 表1数据库管理脚本在操作系统中的物理位置 oracle中几乎所有的系统管理脚本都保存在该文件目 录下,该目录下含有上百个不同文件。这些不同的文件都有

什么作用呢?本文将详细讨论组成oracle数据库管理脚本的命名规范。这样用户看到某个文件大概就可以知道该文件主要用途是什么。该目录下的文件按照功能不同可分为4大类,oracle为了容易区分这几类不同的文件,对于文件的命名遵从一定的规则。见表2所示。 表2数据库管理脚本命名规范 下面来详细介绍这四种不同类型的脚本功能: 1、cat*.sql脚本 该类脚本主要用于创建数据字典视图。其中,脚本catalog.sql和catproc.sql是创建数据库后必须要运行的两个脚本。这两个脚本的功能说明见表3所示。 (1)catalog.sql 该脚本创建相对于系统基表的视图和系统动态性能视图以及他们的同义词。该脚本又同时运行创建其他对象的脚本,主要有: 基本pl/sql环境,包括pl/sql的声明: -数据类型 -预定义例外 -内建的过程和函数 -sql操作等 审计 导入/导出

Oracle数据库开发知识点

Oracle数据库开发指南 前言 参考 第一部分基础 一、数据库对象 表空间Tablespace:存储数据库对象的容器 模式Schema 表Table 表名最长为30个字符,不能以数字开头。一个表最多254个列。 CREATE TABLE tablename AS select_statement,通过子查询建立新表 DESC tablename,查看表或其它数据库对象的定义 ALTER TABLE tablename RENAME new_tablename,修改表名 RENAME tablename TO new_tablename,修改表名,注意修改表名后,视图必须重建。 索引Index 保证表中数据的唯一性;减少定位和检索数据所需要的I/O操作 Oracle允许对列值创建索引,也可对表达式创建索引。所以既可是UNIQUE,也可是UNIQUE Oracle对DESC(降序)索引认为是基于函数的索引。 序列Sequence 使用序列为表的码值生成唯一的序列值 聚簇Cluster 视图View 由一个预定义的查询构成,可看作为数据库的逻辑表。 SELECT text_length FROM user_views WHERE view_name = …viewname? Set long 5000 SELECT text FROM user_views WHERE view_name = …viewname? 快照Snapshot 快照与视图都是基于查询结果的。但快照使用物理的存储空间,快照中的数据一般都是静态的,只有刷新时才改变。 快照的目的是提供某个时间点的数据。 二、数据类型 CHAR(n),255字符 V ARCHAR2(n):2000字符 LONG,2G字符,只能用在列SELECT列表,UPDATE语句的SET子句或INSERT语句的V ALUES子句中,一个表中只能有一个LONG列,LONG列不能建索引,也不能有完整性约束,不能用于表达式。DATE

《ORACLE数据库课程设计》大纲及参考题目要求

《ORACLE数据库课程设计》大纲 一、学时、学分 总学时:2周学分:2 二、对象 网络工程(本科) 三、目的 在掌握课本所讲授的理论知识的基础上,通过一个自选项目的课设,将课本理论知识与实际操作应用相结合,使学生对数据库应用开发过程有个全面的认识,提高学生的实际操作能力,为以后从事数据库开发方面的工作打下基础。 四、条件 硬件:人手一台PC机,要求能够连接到Internet。 软件: Oracle数据库 五、总体要求 1. 课设过程中听从老师安排,遵守实验室的规定。 2. 按时出勤,不迟到,不早退。 3. 独立按时完成课设,如有问题可查阅文献,与同学研讨,不得抄袭别人作业。 4. 课设过程中严格要求自己,高质量完成课设要求的同时,利用网络搜集资料,拓展应用自己所学知识,提高自己解决实际问题的能力。 六、课设内容及学时分配 (1)内容 要求学生自由选择一个数据库应用开发系统为项目课题进行开发。可参考附件中的课题。完成所选系统的数据库设计,前台界面选择实现。 数据库系统设计中包括有数据库系统概述、需求分析(文字描述、数据流程图、数据字典)、概念结构设计、逻辑结构设计、系统优化(规范化)、物理实现(用DDL定义每个基本表并录入基本的数据信息)、数据库管理(加入适当的视图、索引、存储过程、触发器)、测试(根据系统功能写出问题,并用相应的语句功能解决)、数据库维护(数据库备份)。 (2)学时分配

七、要求 每人1题,原则上不得重复(至少本组内不得重复)。 作业一:课设报告 课设报告内容包括:详细介绍所选项目的数据库系统开发过程,结构完整,叙述详实,有必要的图、表,图1 XXX,图2 XXX…,表1 XXX,表2 XXX…。 作业二:数据库原文件(数据文件、日志文件) 要求:(1)课设报告均用A4纸打印,宋体,小四号字,工整、整洁。在报告上方装订两颗钉。学院有统一封面模板。 (2)作业一、二完成后,课设报告交给老师,电子文档上传到ftp://10.1.10.136课设文件夹下。用户名、密码均为yyj,交到“ORACLE课程设计”文件夹下。在网络B121或网络B122下建立自己学号+姓名子文件夹,样式为:01赵依依(3)作业上交时间为2015年1月23日,逾期不再接收。 八、成绩评定、考核办法 由指导教师根据学生完成课设任务的情况(课设过程中的工作态度30%,作业一20%,作业二50%)综合打分。主要是答辩(凭一卡通)和报告。成绩评定实行优秀、良好、中等、及格和不及格五个等级。其中工作态度考核内容包括: 是否按时到场;是否听从统一安排和要求;是否按进度要求完成课设科目;是否保持课设设备完好无损等。

Oracle数据库应用开发相关试题(doc 10页)

Oracle数据库应用开发相关试题(doc 10页)

Oracle 1. ()进程可以将数据库高速缓冲区中的修改的块写到数据文件中。(第十章) A. LGWR。 B. DBWn。 C. CKPT。 D. SMON。 答案. B 2. 当失败的实例再次启动时,()可以执行紧急恢复操作。(第十章) A. LGWR。 B. DBWn。 C. CKPT。 D. SMON。 答案. D 3. ()可以用于备份联机重做日志文件,以便在文件中充满日志或者发生日志切换时存储档案。(第十章) A. ARCn。

B. RECO。 C. SMON。 D. PMON。 案. A 4. 当需要查询当前活动进程的信息时,可以使用()视图。(第十章) A. V$PROCESS。 B. V$SESS_IO。 C. V$SESSION_WAIT。 D. V$LATCH。 答案. A 5. 表空间和数据文件在物理存储上是()的关系(第十章) A. 一对多。 B. 多对一。 C. 一对一。 D. 多对多。 答案. A

A. 数据字典。 B. 数据文件。 C. 控制文件。 D. 表空间。 答案. A 9. 在Oracle数据字典视图中,()视图存储了数据库中所有对象的信息。(第十章) A. dba_*。 B. user_*。 C. all_*。 D. sys_*。 答案. A 10. ()包含了一些潜在的由系统管理员如SYS维护的表和视图,由于当数据库运行的时候它们会不断进行更新。(第十章) A. 动态数据字典。 B. 静态数据字典。 C. dba_*视图。 D. all_*视图。 答案. A

数据库开发规范

项目一部数据库开发规范

注:对该文件内容增加、删除或修改均需填写此变更记录,详细记载变更信息,以保证其可追溯性。

1.命名规范 1.1.对象 新建的表,存储过程,包等要遵循以下规则 1.2.表 表名不得超过30个字母,全部采用大写字母,表的命名可以如下:模块缩写名_表的名称,如RES_NODE代表资源模块的节点; 值班: DUTY_CALENDAR。 1.3.字段名称 字段名不得超过30个字母,必须以英文单词构成,每个单词之间以下划线隔开,全部采用大写字母。对复杂的大型应用系统而言,必须建立表名和字段名的数据字典,并附于开发规范附录中,在命名时必须严格遵守数据字典。

2.数据库对象管理 2.1.一般规定 数据库所有对象,包括表、视图、主键、索引、序列、存储过程、包等必须在数据库建模工具中进行管理并保持与数据库完全同步。 2.2.大小写 在数据库模型、数据库脚本中,所有对象,包括表、视图、主键、索引、序列、存储过程、包等名称必须大写。 3.语句书写规范 3.1.尽量不使用某种数据库的特有功能 为了保持可移植性,尽量不使用某种数据库的特有功能,如SQL Server专用的Unique ID, Oracle专用的Sequence的功能; 3.2.查询sql语句尽量使用绑定变量 3.3.尽最大可能不使用通配符 在SQL语句中,LIKE关键字支持通配符匹配,但这种匹配特别耗费时间。如:SELECT A FROM ABC WHERE A LIKE 'M%' 。在A字段上建立了索引。把语句改为SELECT A FROM ABC WHERE A >'M' AND A <'N',在执行查询时会利用索引以提高响应速度。 使用*通配符必须事先征得项目开发负责人同意。 3.3.1Distinct 使用distinct会增加查询和I/O的操作次数。应当避免使用distinct关键字。 3.3.2嵌套查询 SELECT A FROM CMS_USER WHERE USER_NAME IN ( SELECT USER_NAME FROM CMS_DEPARTMENT WHERE DEPARTMENT=’电子办’)如果我们用连接来代替,且表关联放在条件语句的最后部。即: SELECT A FROM CMS_USER,CMS_DEPARTMENT WHERE CMS_DEPARTMENT .DEPARTMENT=’电子办’ AND CMS_DEPARTMENT .USER_NAME = CMS_https://www.doczj.com/doc/397782792.html,ER_NAME 将提高一定的效率。

Oracle_开发数据库试题.

Oracle_开发数据库选择题1 1.()是Oracle维护数据库中其他文件的列表、数据库名称和系统改变号(SCN)的文件。 A. 控制文件。 B. 参数文件。 C. 数据文件。 D. 可执行文件。 2. Oracle数据库被划分为()的逻辑存储单元,该逻辑存储单元本身由操作系统磁盘文件和原始分区组成。 A. 表空间。 B. 联机重做日志文件。 C. 归档重做日志文件。 D. 回滚段。 3.()是包含Oracle数据库中所有数据的数据库对象。 A. 视图。 B. 索引。 C. 存储过程。 D. 表。 4.()是为了加速对特定表数据的访问而创建的数据段。 A. 视图。 B. 索引。 C. 存储过程。 D. 触发器。 5.下面是有关date数据类型和timestamp数据类型的描述,请问哪一种描述是正确的? A. 两者都只能存储日期数据,不能存储时间数据。 B. 两者都只能存储时间数据,不能存储日期数据。 C. date数据类型比timestamp数据类型的存储时间精度高。 D. date数据类型比timestamp数据类型的存储时间精度低。 6.可以自动执行操作的存储对象是()。 A. 程序包。 B. 函数。 C. 过程。 D. 触发器。 7.当Oracle创建数据库时,所有为数据库的数据字典所建立的基本表和视图都存储在()模式中。 A. SYS。 B. SYSTEM。 C. USER。 D. TEMP。 8.()是Oracle数据库对象的别名,可以强化对象的安全性。 A. 触发器。 B. 视图。 C. 表。 D. 同义词。 9.()是具有只读类型的表和视图集,存储了数据库的物理和逻辑结构信息。 A. 表空间。 B. 盘区。 C. 数据字典。 D. 方案。 10.()是一组Oracle进程和SGA。 A. 实例。 B. 数据库。 C. 表空间。 D. 实体化视图。 11.()可以用于存储4Gb字节的数据。 A. Clob。 B. Blob。 C. Text。 D. Varchar2。 12.NUMBER数据类型存储的最大精度是()。 A. 12。 B. 38。 C. 127。 D. 64。 13.当需要描述一个表table1对象结构时,可以使用(); A. DES table1。 B. DESC table1。 C. DESCR table1。 D. DESCRIB table1。 14.()是目前各类数据库中最重要、最流行的数据库类型。 A. 网络数据库。 B. 图像数据库。 C. 关系数据库。 D. 对象数据库。 15.()是对事物的符号表示,是用于表示事物的未经加工的原始素材。 A. 信息。 B. 数据。 C. 文本。 D. 文件。 16.()是一种软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

Oracle数据库命名规范

命名规范(Oracle数据库)

1表命名 ●命名最好望文生义,避免使用数据库关键词 ●命名一律为大写字母(不要大下写混合) ●英文单词单数命名.例:FACTORY ●英文单词缩写命名.例:DEPT ●英文单词之间用下划线连结,且每个单词皆为单数.例:TASK_RESULT ●用来存储历史资料,命名以HISTORY结尾.例:TASK_HIS ●用来存储日志资料,命名以LOG结尾.例:TASK_LOG ●用来存储类别资料,命名以TYPE结尾.例:TASK_TYPE 2表字段 ●命名最好望文生义,避免使用数据库关键词 ●英文单词单数命名.例:MAIL ●英文单词缩写命名.例:DEPT_ID ●英文单词之间用下划线连结,且每个单词皆为单数.例:USER_NAME ●字段用来存储流水号,命名以ID结尾.例: TASK_ID ●字段用来存储代码,命名以NO结尾.例: TASK_NO ●字段用来存储类别,命名以TYPE结尾.例:STATION_TYPE ●字段用来存储名称,命名以NAME结尾.例:ENDUSER_NAME ●字段用来存储描述,命名以DESC结尾.例:STATION_DESC ●字段用来存储代码,命名以CODE结尾.例:ERROR_CODE ●字段用来存储标志,命名以FLAG开头.例:DEBUG_FLAG 3索引 命名以表名+ INDEX+两位流水号(01~99).例:ENDUSER_INDEX01 4键值 ●主键命名以表名+PK+一位流水号(1~9).例:DEPT_PK1 ●附键命名以表名+AK+一位流水号(1~9).例:DEPT_AK1 ●外键命名以表名+FK+一位流水号(1~9).例:DEPT_FK1 ●检查条件以表名+CK+一位流水号(1~9).例:DEPT_CK1

相关主题
文本预览
相关文档 最新文档