Oracle基础知识

来源:互联网 发布:兆芯cpu运行windows 编辑:程序博客网 时间:2024/06/05 08:32
  1. 理解配置文件tnsnames.ora的作用

    tnsnames.ora是Oracle客户端连接Oracle服务器的重要配置文件。配置用户需要连接的数据库的那个实例。该配置文件一般存放在ORACLE_HOME环境变量对应的 $ORACLE_HOME\network\ADMIN下面。配置说明如下:

tpss=   /**数据库实例的别名,PL/SQL连接那个Oracle实例时,就是选择对应的别名**/   (DESCRIPTION =     (ADDRESS_LIST =        (ADDRESS =         /**Oracle主机所对应的IP地址和端口**/          (PROTOCOL = TCP)(HOST = 136.6.82.8)(PORT = 1521)      )    )    (CONNECT_DATA =       (SERVICE_NAME = tpss)/**数据库实例的名称**/    )  )
  1. 常用的系统表操作
select * from all_users order by user_id;/**查看某数据库实例下的所有用户**/select * from user_tab_privs; /**查看用户是否有读取某张表权限**/select * from all_tab_privs;/**查看所有表的访问权限**/select * from user_tables;/**查看当前登录用户下面所有的表**/select * from all_tables; /**查看当前数据库实例里面的所有表,包括各用户表及系统表**/常用索引操作。索引可理解为存储数据的目录,有了目录自然访问数据就能更快,后绪大家在操作表数据很多的时候一定要记得在关键字段上面增加索引,否则处理效率会非常缓慢。select index_name,table_owner,table_name,tablespace_name,status from user_indexes order by table_name; /**查看当前登录用户下面的所有索引**/select index_name,table_owner,table_name,tablespace_name,status from all_indexes order by table_name; /**查看当前数据库实例里面的所有索引**/常用视图操作。视图是为了方便对表的查询处理,而将某些表中的某些字段通过关联生成一张类似于表的虚拟表。视图并不在数据库中以存储的数据值集形式存在。select view_name,text from user_views;/**第一个字段为视图的名称,第二个字段为生成该视图的SQL语句**/select view_name,text from all_views;序列。序列用于操作数据库中某字段的自增加。我们在javaEE的开发中可能经常用到将某字段(比如主键)设置为自增长。其实在数据库都是通过序列来实现的。select * from user_sequences; /**查看序列**/select * from all_sequences;--新建序列(初始值为1,每次自增1,最大值为999999999):create sequence 序列名 increment by 1 start with 1 maxvalue 999999999---使用序列:insert into 表名 values(序列名.nextval,列1值,列2值);update 表名 set 字段 =序列名.nextval where ?=?

约束。约束使数据库数据满足特定的规则。在Oracle中,约束有 not null、unique、primary key, foreign key和check五种。

  • A、not null(非空) 。如果在列上定义了not null,那么当插入数据时,必须为列提供数据。
  • B、unique(唯一)。当定义了唯一约束后,该列值是不能重复的,但是可以为null。
  • C、primary key(主键)。用于唯一的标识表中的某行数据,当定义主键约束后,该列不但不能重复而且不能为null。一张表最多只能有一个主键,但是可以有多个unique约束。
  • D、foreign key(外键)。用于定义主表和从表之间的关系,外键约束要定义在从表上,主表则必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null。
  • E、check。用于强制行数据必须满足某条件,假定在sal列上定义了check约束,并要求sal列值在1000~2000之间,如果值不在1000~2000之间就会提示出错。
    注意:增加not null约束时,需要使用modify选项,而增加其他四种约束使用add选项

dblink。数据库链路,可以这么理解,只要配置了dblink则可以从一个数据库实例跨库访问另一个数据实例。

select * from user_db_links;select * from all_db_links;  /**查看dblink**/

当用户需要跨本地数据库访问另一个数据库中的数据时,本地数据库中必须创建了远程数据库的dblink连接。通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。
创建dblink一般有两种方式,不过在创建dblink之前用户必须要有创建dblink的权限。想知道有关dblink的权限,以sys用户登录到本地数据库:

select * from user_sys_privs t  where t.privilege like upper('%link%');    1 SYS CREATE DATABASE LINK NO  2 SYS DROP PUBLIC DATABASE LINK NO  3 SYS CREATE PUBLIC DATABASE LINK NO

可以看出在数据库中dblink有三种权限CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了),CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用),DROP PUBLIC DATABASE LINK。
  在sys用户下,把CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK权限授予给你的用户
 

grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott;
  1. 创建dblink的第一种方式。前提:在本地数据库tnsnames.ora文件中配置了要远程访问的数据库 
create public database link to_bylw connect to scott identified by tiger using 'bylw';

其中,to_bylw是创建的dblink的名称,bylw是所要连接的另一个数据库的实例。scott/tiger 是登录bylw的用户名/密码。然后就可以在本地通过dblink访问bylw库中表的数据了。比如要访问bylw中,test表的数据:

select * from scott.test@to_bylw;
  1. 创建dblink的第二种方式。前提:在本地数据库tnsnames.ora文件中没有配置了要远程访问的数据库。
  create database link to_test  connect to scott identified by tiger  using '(DESCRIPTION =  (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)     (PORT = 1521)))  (CONNECT_DATA =       (SERVER = DEDICATED)      (SERVICE_NAME = bylw)))';

可以看到,第二种方式是直接把tnsnames.ora中的信息放在了dblink中。

tablespace。 表空间是一个很重要的概念,他的作用就是将表数据规范的划分到各个区域。比如:一块田被分成了几分,创建表的时候就指定该表位于那一份。当表空间不足的时候可以增加。

/**表空间的剩余空间**/select tablespace_name,         count(*) as extends,         round(sum(bytes) / 1024 / 1024, 2) as MB,         sum(blocks) as blocks   from dba_free_space   group by tablespace_name;/**查询表空间的总容量**/                                                                                   select tablespace_name, sum(bytes) / 1024 / 1024 as MB                                                 from dba_data_files                                                                                group by tablespace_name/**表空间的使用率**/elect total.tablespace_name,                                                                            round(total.MB, 2) as Total_MB,                                                             round(total.MB - free.MB, 2) as Used_MB,                                                                 round((1 - free.MB / total.MB) * 100, 2) || '%' as Used_Pct                                              from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB                                             from dba_free_space                                                                                      group by tablespace_name) free,                                                                          (select tablespace_name, sum(bytes) / 1024 / 1024 as MB                                                  from dba_data_files                                                                                      group by tablespace_name) total                                                                          where free.tablespace_name = total.tablespace_name;
0 0
原创粉丝点击