Oracle学习笔记

修改用户密码:
alter user 用户名 identified by 新密码;


忘记sys和system密码
开始菜单->运行->输入‘CMD’,打开命令提示符窗口,输入如下命令: 
orapwd file=D:/oracle/product/10.2.0/db_1/database/pwdctcsys.ora 
password=newpass 


查看用户表
SELECT * from user_tables;

查询所有用户:
SELECT user_name from dba_users;
查看表中重复数据:
1、利用分组函数查找表中的重复行:按照某个字段分组,找出行数大于1的列,即由重复记录
SELECT column from table_name test group by column having count(column)>1;
2、利用伪列自关联查询:在ORACLE数据库的内部,每一表都有一rowid伪列,行标识惟一标识行,提供对特殊行的快速存取。对该列使用最大(max)或者最小(min)函数可以非常容易地确定重复的行
SELECT column1,column2 from table_name test where rowid<(select max(rowid) from table_name where column1=test.column1 and column2=test.column2);

SELECT column1,column2 from table_name test where rowid>(select min(rowid) from table_name where column1=test.column1 and column2=test.column2);
3、通过定义完整性约束查找重复行


定义一个完整性约束,integrity constraint是一个限制基表中一列或多列值的规则。可通过对表定义UNIQUE约束,指定惟一关键字。为了满足此约束,在惟一关键字列中不能包含相同的值。因此可用EXCEPTIONS INTO子句,将违背激活的完整性约束的记录存储在一个表(EXCEPTIONS)中,此表必须在使用此选项之前先建好。将EXCEPTIONS表和table_name表通过rowid关联起来即可得到表table_name中重复的记录。 具体方法如下:
1)创建表EXCEPTIONS,用来存放重复记录的信息。
SQL>create table exceptions(row_id rowid,   owner varchar2(30),
table_name varchar2(30),
constraint varchar2(30));
2)为表table_name定义惟一(UNIQUE)约束,如果在定义的关键字中包含相同的值,系统将提示ORA-02299: 不能创建 - 有重复的值,并将重复记录的信息存入EXCEPTIONS表中。
SQL>alter table table_name add constraint unq_column unique(column1,column2,……) exceptions into EXCEPTIONS;
2. 将表table_name与EXCEPTIONS通过伪列(rowid)建立关联,伪列相等的记录就是table_name中的重复记录。
SQL>select column1,column2,……  from table_name a ,EXCEPTIONS b where a.rowid=b.row_id ; 这种方式查询效率较高,而且可以较完全的记录下重复记录的信息,但是步骤较繁琐。

查询及删除重复记录的SQL语句
 
1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断  
select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录  
DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表 GROUP BY id HAVING COUNT(*) > 1); 
3、查找表中多余的重复记录(多个字段) 
select * from 表 a where (a.Id,a.seq) in(select Id,seq from 表 group by Id,seq having count(*) > 1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录  
delete from 表 a where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录  
select * from 表 a where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)

查看表中列数:
1、select count(*) from user_tab_columns where table_name=upper('表名')
2、select max(column_id) from user_tab_columns where table_name=upper('表名')

查看表中列属性名:
SELECT column_name from user_tab_columns where table_name = 'TB_CCSTBASICINFO';

oracle数据库导出为csv
set pages
set lines 200
set colsep ','
spool 'e:\test.csv'
select '"'||CUST_ID||'","'||CUST_NAME||'","'||CUST_NAME_ENG||'","'||CUST_CLASS_CD||'","'||CUST_DTL_CLASS_CD||'","'||CUST_MNG_CD||'","'||CUST_NO_TYPE||'","'||CUST_NO||'","'||CRN_ERR_FLAG||'","'||SEX_CD||'","'||CNTRY_CD||'","'||CNTC_TEL_NO||'","'||CNTC_TEL_NO_1||'","'||CNTC_EMAIL_ADDR||'","'||CNTC_ADDR||'","'||SECURITY_FLAG||'","'||LEGACY_CUST_ID||'","'||REGER_EMP_NO||'","'||REGER_EMP_NAME||'","'||REG_OFC_CD||'","'||REG_DATE||'","'||MIG_ID||'","'||MIG_DATE||'","'||CUST_GRD_CD||'","'||END_DATE||'","'||INFO_ASSENT_FLAG||'","'||CHECK_BIT||'","'||BUSI_OWNER_REG_NO||'","'||CUST_REAL_NAME||'","'||CUSID_TYPE_CD||'","'||CUST_IDFY_NO||'"' from TB_CCSTBASICINFO;
spool off;

oracle数据库中dbf文件迁移:当oracle的数据文件所在的磁盘空间不够用了或其他情况需要把dbf文件迁移到另外的位置,下面是操作步骤:
1、sqlplus sys/sys as sysdba
2、shutdown immediate
3、copy dbf文件到新的位置
4、startup mount;
5、alter database rename file 'E:\oracle\oradata\hqbi\EFMWEB03.DBF' to 'G:\oradata\hqbi\EFMWEB03.DBF';
第一个文件为原来表空间的dbf文件,第二个为新的位置
6、alter database open;
7、如果报下面的错:
第 1 行出现错误:
ORA-01113: 文件 9 需要介质恢复
ORA-01110: 数据文件 9: 'G:\ORADATA\HQBI\EFMWEB03.DBF'
则需要执行下面的语句:
recover datafile 'G:\oradata\hqbi\EFMWEB03.DBF';

修改数据库最大进程数:如果遇到登录sqlplus报无法找到
alter system set processes=500 scope = spfile;
查看:show parameter processes
 
修改表空间大小为自动扩展
alter database datafile 'D:\Oracle\oradata\niu\CS.dbf' autoextend on next 100M maxsize unlimited

创建表空间设置表空间大小最大值超过32G时,需要使用bigfile tablespace命令如:
create tablespace CS datafile 'D:\Oracle\oradata\niu\CS.dbf' size 1500M autoextend on next 100M maxsize 100G;

查看表空间大小性能:
select a.tablespace_name,a.bytes / 1024 / 1024 "Sum MB",(a.bytes - b.bytes) / 1024 / 1024 "used MB",b.bytes / 1024 / 1024 "free MB",round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "percent_used" from (select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a, (select tablespace_name, sum(bytes) bytes, max(bytes) largest from dba_free_space group by tablespace_name) b where a.tablespace_name = b.tablespace_name order by ((a.bytes - b.bytes) / a.bytes) desc;

查看表空间是否是自动扩展:
SELECT T.TABLESPACE_NAME,D.FILE_NAME,D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS FROM DBA_TABLESPACES T,DBA_DATA_FILES D WHERE T.TABLESPACE_NAME =D.TABLESPACE_NAME ORDER BY TABLESPACE_NAME,FILE_NAME;

修改触发器:
alter trigger trigger_name disable--禁用
alter trigger trigger_name enable--启用

删除表空间,同时删除数据文件:
drop tablespace test_data including contents and datafiles;

声明游标:
TYPE i_cursor_type IS REF CURSOR;
my_cursor i_cursor_type;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值