导航

ORACLE知识点总结

Posted on 2014-06-29 10:56  十斗米  阅读(312)  评论(0编辑  收藏  举报

 

一、ORACEL常用操作

1、解锁账户:ALTER USER username ACCOUNT UNLOCK;

2、查看数据库字符集:SELECT USERENV ('language') FROM DUAL; 

3、创建表空间:create tablespace cdj_userpace1 datafile '/usr/oracle/oradata/cdj/userpace1.dbf' size 500M;

4、创建数据库用户:create user 用户名 identified by 密码 default tablespace 表空间;

5、给用户授权:grant connect,resource to 用户名;

6、删除数据库用户:drop user 用户名 cascade;    // 加上cascade可以将用户创建的东西全部一起删除

7、完整启动数据库三连:lsnrctl start;  sqlplus / as sysdba;  startup;  

8、完整关闭数据库三连:sqlplus / as sysdba;  shutdown;  lsnrctl stop;

9、查看连接当前数据库的应用:select a.osuser,a.process,a.machine,a.port,a.program,a.sql_hash_value,a.sql_id from v$session a where a.username='数据库用户';

10、修改序列值:alter sequence 序列名 increment by 增量值;  select 序列名.nextval from dual;  alter sequence 序列名 increment by 1; 

11、select * from v$nls_parameters; --查看数据库参数  

12、alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; --修改当前会话时间默认格式, 

        export NLS_TIMESTAMP_FORMAT='yyyy-mm-dd-hh24.mi.ss' --修改环境变量也可以达到修改时间格式的效果

13、alter table 表名 rename column 现列名 to 新列名; --修改表字段名称

14、select dbms_metadata.get_ddl('TABLE','表名','用户名') from dual; --查询建表语句

15、select * from user_tables a where a.partitioned='YES'; --查询所有分区表

------------------------

1、时间类型操作

select to_char(current_timestamp,'yyyy-mm-dd hh24:mi:ss.ff6') from dual;

select to_timestamp('2012-02-03 10:29:46.453234','yyyy-mm-dd hh24:mi:ss.ff6') from dual;

select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff6') from dual;

select cast(sysdate as timestamp) from dual;

select to_date(to_char(add_months(sysdate,-2)+1,'yyyy-mm-dd'),'yyyy-mm-dd') from dual ; --上月第一天

select next_day(sysdate, '星期五')  from dual;--下个周五

select next_day(sysdate, 6) from dual;--下个周五, 周日为1

select LAST_DAY(sysdate) from dual;--当月最后一天

select add_months(sysdate,1) last_month,add_months(sysdate,12) last_year from dual;--下一月,下一年

 

二、数据库名、数据库实例名、数据库域名、全局数据库名、数据库服务名的区别和联系

1、数据库名就是一个数据库的标识,就像人的身份证号一样。如果一台机器上装了多个数据库,那么每一个数据库都有一个数据库名。
数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。

查询当前数据库名 

方法一:select name from v$database; 

方法二:show parameter db 

方法三:查看参数文件。   
2、数据库实例名是用于和操作系统进行联系的标识,就是说数据库和操作系统之间交互用的是数据库实例名。

数据库名和实例名可以相同也可以不同。 
在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。
查询当前数据库实例名 
方法一:select instance_name from v$instance; 

方法二:show parameter instance 

方法三:在参数文件中查询。   
数据库实例名与ORACLE_SID 
虽然两者都表是oracle实例,但两者是有区别的。instance_name是oracle数据库参数。而ORACLE_SID是操作系统的环境变量。ORACLD_SID用于与操作系统交互,也就是说,从操作系统的角度访问实例名,必须通过ORACLE_SID。且ORACLE_SID必须与instance_name的值一致,否则,你将会收到一个错误。 

3、数据库域名,在分布工数据库系统中,不同版本的数据库服务器之间,不论运行的操作系统是unix或是windows,各服务器之间都可以通过数据库链路进行远程复制,数据库域名主要用于oracle分布式环境中的复制。举例说明如: 

全国交通运政系统的分布式数据库,其中: 福建节点:fj.jtyz 福建厦门节点:xm.fj.jtyz 江西:jx.jtyz 江西上饶:sr.jx.jtyz 这就是数据库域名。 
数据库域名在存在于参数文件中,他的参数是db_domain.   
查询数据库域名 
方法一:select value from v$parameter where name = 'db_domain'; 

方法二:show parameter domain 方法三:在参数文件中查询。   

4、全局数据库名=数据库名+数据库域名,如前述福建节点的全局数据库名是:oradb.fj.jtyz 

5、数据库服务名,从oracle9i版本开始,引入了一个新的参数,即数据库服务名。参数名是SERVICE_NAME。数据库与客户端的连接字符串使用数据库服务名。之前用的是ORACLE_SID,即数据库实例名。数据库服务名可以与数据库实例名一致,也可以不一致。可以配置多个服务名连接同一个数据库,相当于是给实例名起了多个“别名”给不同的客户端程序使用。

查询数据库服务名 

方法一:select value from v$parameter where name = 'service_name'; 

方法二:show parameter service_name 

方法三:在参数文件中查询。  

综上所述,为了便于记忆,可以理解为,数据库名/全局数据库名是数据库系统内部的称呼,数据库实例名是介绍给操作系统认识的,数据库服务名是介绍给操作系统上的客户程序认识的。

各个名字在主要配置文件中的使用举例如下:

 listener.ora文件配置

SID_LIST_LISTENER =    //配置文件中必须要要有SID_LIST_LISTENER,否则启动监听时会提示监听程序不支持服务。
  (SID_LIST =
    (SID_DESC=
      (GLOBAL_DBNAME = 全局数据库名)
      (ORACLE_HOME =ORACLE_HOME环境变量设置的位置)
      (SID_NAME = 数据库实例名)
    )
  )

监听名称 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = IP地址)(PORT = 端口))
    )
  )

 

tnsnames.ora文件配置

数据库服务名 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ip地址)(PORT = 端口))    //注意:这里的IP地址如果写成192.168.*.*等局域网IP时,必须联网,sqlplus才能正常连接数据库。 若无网络,必须写成127.0.0.1
    )
    (CONNECT_DATA =
      (SERVICE_NAME = 数据库服务名)
    )
  )

两个配置文件都是放在$ORACLE_HOME\network\admin目录下。

 

 三、使用sqlplus可以用sysdba用户无密码登录的原因

命令:sqlplus / as sysdba  即可登陆dba权限的用户,原因在于${ORACLE_HOME}/network/admin/sqlnet.ora中设置了“以操作系统认证”的方式登陆数据库。即当前的系统用户位于dba的用户组中,则可以以这种方式登陆。 目前一般刚装好的oracle数据库都是这种认证方式。

SQLNET.AUTHENTICATION_SERVICES= (NTS)  // NTS代表操作系统认证,改成none, 则代表改成密码认证

 

四、windows/linux下程序连接ORACLE需要的东西。

1、windows下:oci.h 和 oci.dll或oci.lib

2、unix/linux下:${ORACLE_HOME}/include下的头文件,以及libclntsh.so和libnnz11.so

       oracle\include\nzerror.h
  ......\.......\nzt.h
  ......\.......\occi.h
  ......\.......\occiAQ.h
  ......\.......\occiCommon.h
  ......\.......\occiControl.h
  ......\.......\occiData.h
  ......\.......\occiObjects.h
  ......\.......\oci.h
  ......\.......\oci1.h
  ......\.......\oci8dp.h
  ......\.......\ociap.h
  ......\.......\ociapr.h
  ......\.......\ocidef.h
  ......\.......\ocidem.h
  ......\.......\ocidfn.h
  ......\.......\ociextp.h
  ......\.......\ocikpr.h
  ......\.......\ocixml.h
  ......\.......\ocixmldb.h
  ......\.......\ocixstream.h
  ......\.......\odci.h
  ......\.......\oratypes.h
  ......\.......\ori.h
  ......\.......\orid.h
  ......\.......\orl.h
  ......\.......\oro.h
  ......\.......\ort.h
  ......\.......\xa.h