1.创建表空间:
create tablespace zhongway
logging
datafile 'd:\oracle\product\10.2.0\client_2\orcl\zhongway.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
说明:zhongway是表空间名字,datefile是你自己硬盘的有效地址。 maxsize 20480m 一般我建的时候是去掉的,不要这一句,就是表空间没哟最大限制,有限制用久了老是表空间不足要扩表空间懒得麻烦。其他的应该都看的懂意思。
先用sys身份登录:
用户名:sys
口令:你自己安装oracle设置的密码
数据库:orcl
连接为:SYSDBA
2.创建用户:
--新建用户角色:
create user wxpt identified by zhongway default tablespace zhongway;
--分配权限:
grant connect,resource,dba to wxpt;
说明:wxpt是用户,密码是zhongway,表空间是zhongway,分配resource和dba 权限给用户wxpt,一般分resource最大权限就够了。
3.一般现在就是导入了,前提是你已经有导好的dmp文件,一般是从其他数据库导出的,或者在客户那边导的最新的数据库,下来看怎么从数据库导出dmp文件。
直接在电脑开始点运行,输入cmd命令输入导出语句:
格式:exp wxpt/[email protected]/orcl file=d:\wxpt20170616.dmp buffer=8000
说明:exp 导出 wxpt是用户名,zhongway是密码, 200.200.200.91是自己的ip地址如果是自己电脑上的数据库可以不写IP直接@orcl ,file后面的是你导出的dmp文件的保存在硬盘的哪里和导出文件的名字,buffer=8000是缓冲区。
把语句复制在cmd里面等执行完,看见说明,导出成功的提示说明导出好了。
4.现在有了dmp文件上面2步骤也已经创建好用户了,现在我们把3导出的dmp文件导入2步骤创建的用户。
一样cmd命令:输入如下语句:
格式:imp wxpt/[email protected]/orcl file=d:\wxpt20170930.dmp full=y
说明:和导出语句差不多导出语句你理解了导入一样很好理解,说个习惯一般dmp文件名字是user名字+当天时间+dmp,因为你可能会有很多备份或者导出针对同一个用户。
好了我们把IP为200.200.200.91上的用户导入到了200.200.200.62的数据库上。
注意:如果oracle高版本兼容低版本,低版本不兼容高版本,就是oracle11g的数据库导出的数据,导入不到oracle10g里面,反之可以。
5.下面是一些日常简单语句有时候很有用。
解锁语句:
用sys登录:alter user scott account unlock
说明:scott 是你数据库锁住的用户。
修改用户密码:alteruser wxpt(用户)identified byzhongway(密码)
查看该用户所权限: select *from session_privs;
查看该用户拥有的角色: select* from user_role_privs;
查看该角色有哪些权限:select* from dba_sys_privs t where t.grantee='RESOURCE';
查询该用户下有多少视图: select* from user_views;
创建一个自增的序列:createsequence sequence_id
startwith1
incrementby1
maxvalue999999999999
nocache
nocycle;
说明:从1开始每次自增1 最大999999999999值不能循环
创建索引:createindex id_test_indexontest_index(id);
查询表空间是否自动扩展,和最大值
selectt.autoextensible数据文件是否自动扩展,t.maxbytes 数据文件最大 fromdba_data_files t wheretablespace_name='zhongway';
6.删除重复数据的办法,推荐第一种,想当年自己写的很长的一个。。。。。
按nh_sfz相同的分到一组但是物理rowid删除不是最大的就去除重复了
delete from tbl_bt where rowid not in (select max(rowid) from tbl_bt t groupby nh_sfz );
分组后having count()查找
select* from tbl_bt wherenh_sfzin ( selectnh_sfz fromtbl_bt groupbynh_sfzhavingcount(nh_sfz)>1);
还是利用物理地址rowid查询
select* from tbl_btwherenh_sfz in (selectnh_sfzfrom tbl_bt whererowidnotin (selectmax(rowid)from tbl_bt groupby nh_sfz ) );
7.用闪存恢复删除的数据或者表--如何快速恢复刚删除的表和数据flashback闪回
--事务闪回:才更新了insert 和update 和delete语句的时候需要恢复commit操作之前的数据,则需要撤销刚才的操作。
--行级闪回:对表进行了insert和update和delete语句,需要恢复到一个时间点。
--表级闪回:错误的drop,table操作,需要表和表中的数据。
--数据库级闪回:错误的将整个数据库很多数据,需要将整个数据库恢复到过去时间点。
--是否有闪回权限
select * from session_privs where privilege like 'FLASHBACK%';
--如果没有查到数据就是没有权限登陆sys 分配权限
grant flashback any table to 'yxgwcs';
--查询时间点的数据
select sysdate from dual;--当前时间
select * from tblweb_pwd as of timestamp to_timestamp('2017/3/17 10:27:42','yyyy-mm-dd hh24:mi:ss') where xm='赵树仁';
--开启行移动功能 全部整表插入 开始
alter table tblweb_pwd enable row movement;
--恢复表数据
flashback table tblweb_pwd to timestamp to_timestamp('20170317100000','yyyy-mm-dd hh24:mi:ss');
--关闭行移动功能 ( 千万别忘记 )
alter table tblweb_pwd disable row movement;
--全部整表插入 结尾
--插入单条数据数据
insert into tblweb_pwd select * from tblweb_pwd as of timestamp to_timestamp('20170317100000','yyyy-mm-dd hh24:mi:ss') where xm='赵树仁';
--这个是11g才能用
select t.start_timestamp,t.commit_timestamp,t.logon_user,t.operation,
t.table_name,t.table_owner,t.undo_sql
from flashback_transaction_query t where table_name='tblweb_pwd';
--查询到值再插进去
--恢复删除的表
--1先查看删除的表在能恢复的列表没
select * from user_recyclebin order by droptime desc;
--恢复到删除之前
flashback table TBL_BOTTOM_COPY to before drop;
8.sum()函数的一个奇异现象
select sum(1) from dual where 1=2;
说明:因为sum()函数一定有返回值,这样会返回一个空行记录,我现在不想要这个记录,这样写
select sum(1) from dual where 1=2 group by 1000;
说明:加group by语句。