免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2162 | 回复: 0
打印 上一主题 下一主题

记录2 [复制链接]

论坛徽章:
1
2015亚冠之大阪钢巴
日期:2015-07-02 09:26:01
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-22 17:27 |只看该作者 |倒序浏览
1.
    DML (data manipulation language)语句:数据操纵语言
        它们是SELECT、UPDATE、INSERT、DELETE
    DDL (data definition language)  语句:数据定义语言
        主要的命令有CREATE、ALTER、DROP等      
    DCL (data control language)     语句:数据控制语言
        用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。
        在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
   
    索引:由表中一列的值快速定位到表中的一行。   
    表分区:表分区使你可以生成可伸缩的应用程序
    正常范围分区表的优点应该是:
    1.当不同的表空间存储在不同的存储设备时,可以将分区表储存在多个表空间,进而降低I/O
    2.各个分区维护各自的本地索引
    3.select语句可以根据索引进行分区范围扫描
    4.可以对单个分区进行备份或者删除
    5.方便对表的分区进行添加,删除,合并   
    正常范围分区表的缺点应该是:
    1.分区表不能跨分区定义唯一制约
    2.insert性能下降
    3.复杂的表检索时性能可以下降
2.   
    在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
    UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果
    而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。     
    sqlplus settlementdb/settlementdb@settlementdb <<!   
     define db_user_name="${db_user}"
     define db_passwd="${db_user}"
     @${_WORK_DIR}/sql/xxx.sql
     exit
    !   
    xxx.sql:
    create user &&db_user_name identified by &&db_passwd default tablespace &&aaa_tab_space;
    grant connect, resource to &&db_user_name;
    grant select on sys.v_$session to &&db_user_name;
    grant select on sys.v_$instance to &&db_user_name;
    exit;
    show all即可看到所有环境变量的默认值。   
    SGA:System Global Area   
    Spfile文件路径
    show parameter pfile
   
    控制文件路径
    desc v$controlfile;
   
    在线日志
   
    归档日志目录
    查看初始化参数
    show  parameter  log_archive_dest
    看到是哪个目录就是它了
    如果没有值,再查
    show parameter db_recovery_file_dest   
    查看是什么模式 是容灾还是生产
    select database_role,protection_mode,protection_level from v$database;

    将容灾机的DataGuard设置成real-time apply模式,这样在生产机的动作会立马在容灾机体现出来。
    alter database recover managed standby database using current logfile disconnect from session;  
    show parameter db_unique_name   
    lsnrctl
    $ORACLE_HOME/network/admin
    show parameter log_archive_dest_2
    生产机:
    alter system set log_archive_dest_2='SERVICE=droradg01 OPTIONAL LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=drora85';
    容灾机:
    alter system set log_archive_dest_2='SERVICE=oradg01 OPTIONAL LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora85';

    alter system set db_file_name_convert='+DG_DATA','+DG_DATA' scope=spfile;
   
    show parameter db_file_name_convert
   
    show parameter log_file_name_convert
   
    create pfile='initora86.ora' from spfile;
   
    alter system set db_file_name_convert='+DG_DATA/ora85','+DG_DATA/ora86' scope=spfile;
   
    alter system reset db_file_name_convert scope=spfile
   
    $ sqlplus '/as sysdba'
    SQL> create spfile from pfile;
    如果pfile没有放到$ORACLE_HOME/dbs/下,而是放在别的位置:
    SQL> create spfile from pfile='/backup/initPHYSTDBY.ora';

    1.在最大保护模式下,容灾机如果是read-only模式。如果生产机不停止,容灾机是停不了的,会报错ORA-01154: database busy. Open, close, mount, and dismount not allowed now
   
    这时必须先停生产再停容灾, 而在最大性能模式下则没有这些限制。
   
    2.生产机如果报ORA-03113: end-of-file on communication channel错,表示没有一台standby的容灾机是开启的。可以将保护模式降级来解决。
   
    3.数据库处在哪种模式下和log_archive_dest_2是syns还是asyns没有必然的关系,log_archive_dest_2设置成syns是能切换到最大保护模式下的必要条件,而非充分条件。
    即log_archive_dest_2为syns数据库也可以在最大性能下运行。
   
   
    查看表或者视图的字段:
    desc v$database;
    字段值模糊匹配用like
   
    lsnrctl start listener_pm
    lsnrctl start/stop默认是操作listener
    如果其它listener需要加上名字.要不是对默认listener操作.
   
    RAC,全称real application clusters,译为“实时应用集群”, 简单的说就是一个数据库,多个实例,数据库是存放在共享存储上,每个实例对应一台服务器。
   
   
    scope=both:同时改配置文件和正在运行的实例参数
    scope=spfile:只是改配置文件,需要重新启动以后生效
   
    CBO : cost based optimizer
    RBO : rule based optimizer

    当发生数据丢失时,很难查到原因,不知道究竟是由于程序问题还是在数据库中误操作引起的,而oracle审计功能,可以有效帮助我们对重要的数据表进行跟踪,以确定数据变更发生在什么时间,从哪里发出及变生变更时使用的SQL语句等.
      开启审计:
      Oracle从9i开始已提供了审计功能,但由于审计功能会降低系统性能,因此数据库默认是关闭审计的。
    要确认在数据库安装时是否安装了审计功能,请在sys用户下执行:
    Select count(*) from user_tables where table_name='AUD$';
    如果返回结果为0,表明审计还未安装,必须先在sys用户下执行:
    @$ORACLE_HOME/rdbms/admin/cataudit.sql
    来安装审计功能。
   
      要打开审计功能,可通过调整一个参数实现:
      alter system set audit_trail=DB,Extended scope=spfile;
    调整完后,要重启数据库,此时,审计功能已打开,可以使用。但由于审计结果的数据量较大,结果表sys.aud$存放在系统表空间system中,会导致系统表空间膨胀严重,因此,推荐先将aud$表移到独立的表空间中去.
   
      上述工作完成后,审计已经开启,但此时由于还没有设置要审计的具体对象,因此,还不会有审计数据记录。所有要审计的对象可能过查询下面的视图得到:
    select * from DBA_OBJ_AUDIT_OPTS;
    其中,owner表示要审计的表的拥有者,object_name表示要审计的对象的名称,object_type表示要审计的对象的类型,可能是表,也可能是视图等,其它都是要审计的操作项目,由于我们只关注:insert、update与delete,因此,只需要关注:ins、upd、del三列。
    要将一张表设置为审计对象,需要执行下面的命令(在对象拥有者下执行,对管控一般是共享库):
    audit 操作 on 表名;
    如希望记录所有发生在表T1上的变更操作,可执行如下命令:
    Audio delete on T1 by access;
    Audio insert on T1 by access;
    Audio update on T1 by access;
    要取消某个对象的审计,命令如设置审计类似:
    noaudit 操作 on 表名
      这样,完整的数据库表审计操作已经大功告成,感兴趣的朋友不妨动手亲自操作一下.
   
   
    select * from DBA_AUDIT_POLICIES where ENABLED='YES'
    细粒度审计:
    添加审计策略
   
    begin
    dbms_fga.add_policy( object_schema =>'TCNEW',
                         object_name =>'test',
                         policy_name =>'chk_test',
                         audit_condition =>'a = 1',
                         audit_column =>'b',
                         enable =>FALSE
                       );
    END;
   
    激活审计:
    DBMS_FGA.ENABLE_POLICY(object_schema  VARCHAR2,   object_name    VARCHAR2,   policy_name    VARCHAR2,   enable  BOOLEAN);
   
    SYS用户审计(Auditing User SYS and Users Who Connect as SYSDBA and SYSOPER):
    alter system set audit_sys_operations=TRUE scope=spfile;审计的日志在“audit_file_dest”参数指向的地方
   
   
    oracle的trace和alert日志目录使用show parameter BACKGROUND_DUMP_DEST查看
    $ORACLE_BASE/diag/rdbms/SID/SID/trace
   
   
    数据库由一个或多个表空间组成。一个表空间可以包括一个或者多个数据文件,但一个数据文件只能属于一个表空间。
    所有要删除数据文件语句为:drop tablespace <tablespace_name> including contents;
    物理上,表空间由一个或者多少数据文件;逻辑上,表空间由一个一个的段组成。
    段(即表、索引等)由一个或者多个(盘)区组成,(盘)区是不会跨文件的。
    (盘)区是由磁盘上连续的块组成的。
    块是数据库中最小的分配单元,也是数据库的最小I/O单元。一个数据块可能就对应了它所属的段(表、索引等)的一行数据记录。
   
    表空间:tablespace
    段:segment
    区:extent
    块:block
   
    SQL> spool output.txt
    SQL> @?/test.sql
   
    OPEN_MODE
    -----------
    READ WRITE
   
    SQL> spool off
   
    SQL> set line 300
   
    National Language Support (NLS)
   
    ............................................................
    --添加对密码复杂度的检查
    SQL> col PROFILE format a12
    SQL> col RESOURCE_NAME format a25
    SQL> col LIMIT format a15
    SQL> select * from dba_profiles;
   
    PROFILE      RESOURCE_NAME             RESOURCE_TYPE            LIMIT
    ------------ ------------------------- ------------------------ ---------------
    DEFAULT      COMPOSITE_LIMIT           KERNEL                   UNLIMITED
    DEFAULT      SESSIONS_PER_USER         KERNEL                   UNLIMITED
    DEFAULT      CPU_PER_SESSION           KERNEL                   UNLIMITED
    DEFAULT      CPU_PER_CALL              KERNEL                   UNLIMITED
    DEFAULT      LOGICAL_READS_PER_SESSION KERNEL                   UNLIMITED
    DEFAULT      LOGICAL_READS_PER_CALL    KERNEL                   UNLIMITED
    DEFAULT      IDLE_TIME                 KERNEL                   UNLIMITED
    DEFAULT      CONNECT_TIME              KERNEL                   UNLIMITED
    DEFAULT      PRIVATE_SGA               KERNEL                   UNLIMITED
    DEFAULT      FAILED_LOGIN_ATTEMPTS     PASSWORD                 10
    DEFAULT      PASSWORD_LIFE_TIME        PASSWORD                 180
   
    PROFILE      RESOURCE_NAME             RESOURCE_TYPE            LIMIT
    ------------ ------------------------- ------------------------ ---------------
    DEFAULT      PASSWORD_REUSE_TIME       PASSWORD                 UNLIMITED
    DEFAULT      PASSWORD_REUSE_MAX        PASSWORD                 UNLIMITED
    DEFAULT      PASSWORD_VERIFY_FUNCTION  PASSWORD                 NULL
    DEFAULT      PASSWORD_LOCK_TIME        PASSWORD                 1
    DEFAULT      PASSWORD_GRACE_TIME       PASSWORD                 7
   
    16 rows selected.
   
    SQL> @?/rdbms/admin/utlpwdmg.sql
   
    SQL> select * from dba_profiles;
   
    PROFILE      RESOURCE_NAME             RESOURCE_TYPE            LIMIT
    ------------ ------------------------- ------------------------ ---------------
    DEFAULT      COMPOSITE_LIMIT           KERNEL                   UNLIMITED
    DEFAULT      SESSIONS_PER_USER         KERNEL                   UNLIMITED
    DEFAULT      CPU_PER_SESSION           KERNEL                   UNLIMITED
    DEFAULT      CPU_PER_CALL              KERNEL                   UNLIMITED
    DEFAULT      LOGICAL_READS_PER_SESSION KERNEL                   UNLIMITED
    DEFAULT      LOGICAL_READS_PER_CALL    KERNEL                   UNLIMITED
    DEFAULT      IDLE_TIME                 KERNEL                   UNLIMITED
    DEFAULT      CONNECT_TIME              KERNEL                   UNLIMITED
    DEFAULT      PRIVATE_SGA               KERNEL                   UNLIMITED
    DEFAULT      FAILED_LOGIN_ATTEMPTS     PASSWORD                 10
    DEFAULT      PASSWORD_LIFE_TIME        PASSWORD                 180
   
    PROFILE      RESOURCE_NAME             RESOURCE_TYPE            LIMIT
    ------------ ------------------------- ------------------------ ---------------
    DEFAULT      PASSWORD_REUSE_TIME       PASSWORD                 UNLIMITED
    DEFAULT      PASSWORD_REUSE_MAX        PASSWORD                 UNLIMITED
    DEFAULT      PASSWORD_VERIFY_FUNCTION  PASSWORD                 VERIFY_FUNCTION

    DEFAULT      PASSWORD_LOCK_TIME        PASSWORD                 1
    DEFAULT      PASSWORD_GRACE_TIME       PASSWORD                 7
   
    16 rows selected.
3.
    安装了grid时,只有grid用户的tnsname.ora、listener.ora起作用,oracle用户下可以不用定义这些文件。
   
    listener监听器相当于一个代理的角色,他负责监听定义的端口的请求,并将请求转给数据库。
    如果只有一个实例,listener.ora中的HOST可以不用定义。有多个实例时通过端口不同区别。
    "SID_LIST_LISTENER"段已经不用定义,原先他是用来监听的静态注册的,现在都是动态注册。   
4.
    select TABLESPACE_NAME,BLOCKS,USER_BLOCKS from dba_data_files;
   
    select SEGMENT_NAME,OWNER,SEGMENT_NAME,BLOCKS,EXTENTS from DBA_SEGMENTS where tablespace_name='USERS' ;
   
    select * from dba_extents
   
    select table_name from user_tables;
   
    alter database backup controlfile to trace as '?/ctl.txt';
   
    alter database backup controlfile to trace;   
   
    SET AUTOTRACE ON
    SET AUTOTRACE OFF
   
    set autotrace on explain;
   
    set autotrace traceonly statistics
   
    rman> list backup of database;
   
    sqlplus / as sysasm
   
    AWR(Automatic Workload Repository)自动负荷信息库
5.
    alter database 改变的一个数据库的属性   一般改变的是物理上的  能看得见的
    比如 :alter dtabase rename datafile
    alter system     动态的改变数据库例程的属性   一般是逻辑上的  看不见的
    比如:alter system set db_cache_size  
    alter session    改变的的是一个会话的属性
    比如:alter session set nls_language

    On 11gR2, Oracle Clusterware consists of two separate stacks:
    an upper stack anchored by the Cluster Ready Services (CRS) daemon (crsd)
    and a lower stack anchored by the Oracle High Availability Services daemon (ohasd).
   
    其中一个原因是因为在shutdown immediate前有大的transaction需要rollback,只能等待事务回滚完毕,数据库达到一致的状态,才能顺利shutdown.   
    因此,shutdown数据库之前最好察看一下是否有大的transaction在运行。   
    select sum(used_ublk) from v$transaction;
   
    TRUNCATE不会逐个清除用户数据块上的数据,而仅仅重置数据字典和元数据块上的元数据(如存储段头和扩展段图)。
    也就是说,此时,其基本数据并未被破坏,而是被系统回收、等待被重新分配.
    delete产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的rollback segments.
    truncate 是DDL操作,不产生rollback,速度快一些.
    truncate 调整TABLE的high water mark 而delete不.
    如果TRUNCATE一个表的分区,那么全局分区索引需要REBUILD
    当你不再需要该表时, 用 drop;
    当你仍要保留该表,但要删除所有记录时, 用 truncate;
    当你要删除部分记录时(always with a WHERE clause), 用 delete.
   
    group by:分组的含义就是这些字段都相等的合并为一条数据.
    在带有group by 子句的查询语句中,在select 列表中指定的列,要么是group by 子句中指定的列,要么包含聚组函数
    "group by 字段列表"表示根据后面的字段来分组,如果只有1个字段,那只是根据这个字段的值来进行一次分组就可以了;若后面有多个字段,
    那表示根据多字段的值来进行层次分组,分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中,再根据第2个字段的值进行分组;
    接着第2个字段值相同的记录中,再根据第3个字段的值进行分组......依次类推。
    SQL> select depid,sum(salenum) from sales group by depid;
    DEPID SUM(SALENUM)   
    ---------- ------------   
    1        70   
    2        20   
    3        20
    事实上只有dml语句和select...for update才会发生db block gets,你只要记住一点,db block gets永远是只从缓冲区中获得最新的数据
    (请注意‘缓冲区’和‘最新’),而对于普通的select语句来说,如果数据还没装入缓冲区就是physical reads,否则就是consistent gets。
    db block gets      从buffer cache中读取的block的数量                  
    consistent gets    从buffer cache中读取的undo数据的block的数量,一致性读,就是发送SQL那个时刻的数据(可能涉及到未提交事务保留的undo信息等)
    physical reads     从磁盘读取的block的数量,当前(Current)读,就是Session最后时刻的数据,该数据可能是你修改过的数据,可以加锁的数据

col Tablespace format a20
select df.tablespace_name "Tablespace",
df.bytes/(1024*1024) "Total Size(MB)",
sum(fs.bytes)/(1024*1024) "Free Size(MB)",
round(sum(fs.bytes)*100/df.bytes) "%Free",
round((df.bytes-sum(fs.bytes))*100/df.bytes) "%Used"
from dba_free_space fs,
(select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) df
where fs.tablespace_name = df.tablespace_name
group by df.tablespace_name, df.bytes;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP