文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» Oracle 10g / 9i » 请教表分区可否跟用户建立关系       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: 请教表分区可否跟用户建立关系  ( 查看:247  回复:5 )   
 该主题悬赏的20无忧币已被全部领完 
 
银色天使
新新人类  点击可查看详细



论坛万户侯   十二生肖之狗   处女座   行业勋章   技术勋章   诚信兄弟  
帖子 48
精华 0
无忧币 70
积分 67
阅读权限 20
注册日期 2006-3-20
最后登录 2008-7-26 离线

[查看资料]  [发短消息]  [Blog
[个人主页]         
发表于:2008-7-23 18:30   标题:请教表分区可否跟用户建立关系
上一帖 |
项目有这么个需求,一个表记录很多,到上千万条,
其中记录的是20个县的消费明细记录,
按照这20个县可以把这个大表分成20个表分区,
有个想法,是要对应建立20个用户,
每个用户只能看到他自己对应分区的内容,看不到其他分区的内容,
这样可以通过角色来设置吗?
如果角色不行通过什么办法能实现呢?
比较急啊,先谢谢大家~



2008-7-23 18:301楼
[ 顶部 ]
 
national
副版主  点击可查看详细



十二生肖之猪   巨蟹座   行业勋章   技术勋章   诚信兄弟  
帖子 59
精华 0
无忧币 251
积分 69
阅读权限 140
注册日期 2008-2-21
最后登录 2008-10-13 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-7-24 09:04  该回复被 银色天使 奖励 20 点无忧币
此回复于2008-07-26 16:00被 银色天使 评为最佳答案

你可以在特定的表分区上建立视图,然后将这些视图的权限授予特定的用户,这样就可以解决特定用户访问特定分区的问题。
还是举个例子吧。
我用redhat用户登陆
CREATE TABLE emp (
id INT PRIMARY KEY,
name VARCHAR2(20),
dept   INT)
PARTITION BY RANGE (dept)
(PARTITION p1 VALUES LESS THAN (2),
PARTITION p2 VALUES LESS THAN (3)
);

INSERT INTO emp VALUES (1, 'zhangsan', 1);
INSERT INTO emp VALUES (2, 'lisi', 2);
INSERT INTO emp VALUES (3, 'wangwu', 2);
INSERT INTO emp VALUES (4, 'zhaoliu', 1);

CREATE VIEW emp_dept1_vu AS
SELECT *
  FROM emp PARTITION (p1);
  
CREATE VIEW emp_dept2_vu AS
SELECT *
  FROM emp PARTITION (p2);
  
有两个用户分别为user1, user2

GRANT SELECT ON emp_dept1_vu TO user1;
GRANT SELECT ON emp_dept2_vu TO user2;

接下来你分别用user1, user2登陆
SELECT * FROM redhat.emp_dept1_vu;
SELECT * FROM redhat.emp_dept2_vu;

如果需要的话你还可以建立同义词

[ 本帖最后由 national 于 2008-7-24 15:28 编辑 ]



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2008-7-24 09:042楼
[ 顶部 ]
 
特爱蚂蚁
管理员  点击可查看详细


诚信兄弟   行业勋章   技术勋章   管理员专用   十二生肖之牛  
帖子 1692
精华 3
无忧币 3294
积分 1585
阅读权限 255
来自 (保密)
注册日期 2008-6-3
最后登录 2008-10-13 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-7-24 09:04 
数据按时间建分区表  一般10天一个分区
建新表空间的时候把存档最久的分区删掉
删掉很简单:先删表分区,再删表空间

代码送给楼主了

[Copy to clipboard] [ - ]
CODE:
create or replace procedure P_Create_BILLPART_partition(Vmon IN varchar2)
is
  S_Path varchar2(200);  --数据文件存放地
  billindex varchar2(20);  --索引名
  partitonnem varchar2(20); -- 分区名和表空间名
  S_Spacename varchar2(20); --数据文件名.dbf
  S_SpacenameAdd varchar2(20); --数据文件名.dbf
  Vdate Varchar2(20); --后半段数据文件和分区名
  SDate   Date ; --开始时间
  Ndatesum number; --建几个表空间
  Nsql varchar2(2000);
  Ldate Varchar2(20); -- less than date

begin
   SDate:=To_date(Vmon||'01','YYYYMMDD'); -- 开始时间,更改月份即可
   S_Path:='F:\'||Vmon||'\';   --数据文件存地
   Ndatesum:=3; --生成几天的表空
   
   For i in 1..Ndatesum Loop
     Vdate:=to_char(SDate,'MM')||'0'||to_char(i);
     billindex:='BillInd_'||Vdate;
     partitonnem:='BillPart_'||Vdate;
     S_Spacename:='BillPart_'||Vdate||'.dbf';
     S_SpacenameAdd:='BillPart_'||vdate||'add.dbf';
     

     Nsql:='create tablespace '||partitonnem||' datafile '''||S_Path||S_Spacename||''' size 1024M reuse ';
     Nsql:=Nsql || 'autoextend on next 5m maxsize unlimited, '''|| S_Path||S_SpacenameAdd||''' SIZE 400M REUSE ';
     Nsql:=Nsql || 'AUTOEXTEND ON NEXT  5m MAXSIZE  Unlimited default storage (initial 10M next 10M MINEXTENTS 3 MAXEXTENTS Unlimited PCTINCREASE 0)';   
     execute immediate Nsql;

     Nsql:='create tablespace '||billindex||' datafile '''||S_Path||billindex||'.dbf'' size 215m autoextend on next 5m maxsize unlimited default storage (initial 10M next 10M pctincrease 0)';
     execute immediate Nsql;
     
     Ldate:=to_char(SDate+(i*10),'YYYYMMDD');--10天一个分区
     Nsql:='alter table particu_bill add partition '||partitonnem||' values less than ('''||Ldate||''') tablespace '||partitonnem||'  nologging storage(initial 10m next 10m minextents 1 maxextents unlimited pctincrease 0)';
     execute immediate Nsql;

     Nsql:='alter index IND_PARTICU_YHHM rebuild partition '||partitonnem||' tablespace '||billindex||' storage(initial 10m next 5m maxextents unlimited pctincrease 0)';
     execute immediate Nsql;

     Nsql:='alter index IND_PARTICU_YHHM nologging';
     execute immediate Nsql;
   End Loop;

end P_Create_BILLPART_partition;

比如要删一个月数的数据

alter table tablename drop partition partitionname10;
alter table tablename drop partition partitionname20;
alter table tablename drop partition partitionname30;

drop tablespace tablespacename10;
drop tablespace tablespacename20;
drop tablespace tablespacename30;

就搞定了   方便多了



善用论坛论坛搜索功能会使您事半功倍 ...
建议大家发帖前先抬头看看整个论坛和板块的置顶帖了解论坛各项最新制度 ...
请选用高效的沟通方式来和大家沟通 ...同时应该具备一些提问的智慧 ...
勤劳致富,无忧币不再是难题 ...
2008-7-24 09:043楼
[ 顶部 ]
 
银色天使
新新人类  点击可查看详细



论坛万户侯   十二生肖之狗   处女座   行业勋章   技术勋章   诚信兄弟  
帖子 48
精华 0
无忧币 70
积分 67
阅读权限 20
注册日期 2006-3-20
最后登录 2008-7-26 离线

[查看资料]  [发短消息]  [Blog
[个人主页]         
发表于:2008-7-24 09:26 
先谢谢蚂蚁,
我的目的是要把用户的访问控制跟分区结合起来,
一个用户只能访问特定分区,这个是主要需求,这个有办法实现么?



2008-7-24 09:264楼
[ 顶部 ]
 
wenaini
新新人类  点击可查看详细


帖子 43
精华 2
无忧币 152
积分 115
阅读权限 20
注册日期 2008-2-29
最后登录 2008-10-5 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-7-25 11:51 
可以使用视图或者VPD实现



其实我股炒的比oracle好。。。
2008-7-25 11:515楼
[ 顶部 ]
 
银色天使
新新人类  点击可查看详细



论坛万户侯   十二生肖之狗   处女座   行业勋章   技术勋章   诚信兄弟  
帖子 48
精华 0
无忧币 70
积分 67
阅读权限 20
注册日期 2006-3-20
最后登录 2008-7-26 离线

[查看资料]  [发短消息]  [Blog
[个人主页]         
发表于:2008-7-26 16:00 
不好意思啊,点了才发现这个悬赏是一次性都给了一个人的,谢谢大家帮忙。



2008-7-26 16:006楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号