SQL2005新特性:管理数据库可用性和架构分离

需积分: 3 1 下载量 60 浏览量 更新于2024-08-02 收藏 177KB DOC 举报
"SQL2005新特性_管理可用性.doc" 在SQL Server 2005中,引入了许多增强的功能,特别是针对管理和可用性的改进。以下是对这些新特性的详细说明: 1. **ATTACH_REBUILD_LOG**: 这是一项重要的新功能,允许在没有完整日志文件的情况下附加数据库。在某些情况下,例如将数据库从生产环境转移到只读的报表服务器,不需要完整的日志文件,因为报表服务器通常不需要执行回滚或事务处理。`ATTACH_REBUILD_LOG`子句使得只需复制必要的数据文件(MDF),而重建日志文件(LDF),从而简化了数据库的迁移过程。 2. **用户和架构分离**: SQL Server 2005引入了用户与架构的分离,这是一个重大的设计变更。在旧版本中,用户直接拥有数据库中的对象,但在2005版本中,对象被置于架构之下,而架构可以由角色拥有。这意味着多个用户可以共享同一个架构,且管理对象所有权变得更加灵活。例如,如果需要删除一个用户,其在架构中的对象不会受到影响,因为它们现在属于架构而不是用户。此外,架构级别的权限管理也得以加强,可以更精确地控制对架构及其内对象的访问。 示例操作: ``` USE UFSub GO CREATE SCHEMA SA AUTHORIZATION dbo GO CREATE TABLE SA.Table1 (a int) GO ALTER SCHEMA SA TRANSFER dbo.fitem GO SELECT * FROM SA.fitem ``` 在这个例子中,我们创建了一个名为`SA`的新架构,并将其所有权转移给`dbo`角色,然后将`dbo.fitem`表转移到`SA`架构下。 3. **架构权限和对象迁移**: SQL Server 2005提供了新的T-SQL命令,如`GRANT架构权限`和`GRANT对象权限`,用于控制架构内的权限分配。同时,使用`ALTER AUTHORIZATION`可以改变架构的所有权,`ALTER SCHEMA`则允许在不同的架构间移动对象。这增加了数据库设计的灵活性和安全性。 这些特性极大地提高了SQL Server 2005的管理效率和可用性,尤其是在大型企业环境中,使得数据库的维护、迁移和权限管理变得更加方便和可控。通过利用这些新特性,管理员可以更好地满足业务需求,同时确保系统的稳定性和安全性。

编译报错 CREATE OR REPLACE PROCEDURE get_dev_cs IS sql_tem VARCHAR2(4000); v_dt NUMBER; BEGIN ----om_subscriber_yyyymm sql_tem := 'truncate table ycyd.Subscriber_cs'; EXECUTE IMMEDIATE sql_tem; FOR v_dt IN (SELECT to_number(substr(table_name, '15')) db FROM sys.all_tables a WHERE a.owner = upper('jour1') AND a.table_name LIKE upper('om_subscriber_202___') AND substr(table_name, '15') > 202205) LOOP -- 循环往b里添加数据 sql_tem := ' INSERT INTO ycyd.Subscriber_cs SELECT a.order_id, a.done_date, a.cust_id, a.subscriber_ins_id, a.access_num FROM jour1.om_subscriber_' || v_dt.db || ' a WHERE a.action = 0 AND a.is_usim = 1'; -- 执行sql EXECUTE IMMEDIATE sql_tem; END LOOP; ----om_order_yyyymm sql_tem := 'truncate table ycyd.order_cs'; EXECUTE IMMEDIATE sql_tem; COMMIT; FOR v_dt IN (SELECT to_number(substr(table_name, '15')) db FROM sys.all_tables a WHERE a.owner = upper('jour1') AND a.table_name LIKE upper('om_subscriber_202___') AND substr(table_name, '15') > 202205) LOOP -- 循环往b里添加数据 sql_tem := ' INSERT INTO ycyd.order_cs SELECT order_id, dev_id FROM JOUR1.om_order_' || v_dt.db || ' b'; -- 执行sql EXECUTE IMMEDIATE sql_tem; END LOOP; COMMIT; ---dev sql_tem := 'truncate table ycyd.yd_order_dev_3056'; EXECUTE IMMEDIATE sql_tem; -- 添加数据 sql_tem := ' INSERT INTO ycyd.yd_order_dev_3056 SELECT a.order_id, a.done_date, a.cust_id, a.subscriber_ins_id, a.access_num, c.dev_id, c.dev_name, d.code, c.dev_busi_code, c.corp_org, c.company_name, c.department_code, c.department_name, c.remarks FROM ycyd.Subscriber_cs a LEFT JOIN ycyd.order_cs b ON a.order_id = b.order_id LEFT JOIN params1.sec_developer c ON b.dev_id = c.dev_id LEFT JOIN (SELECT DISTINCT oo.code,s.bill_id FROM params1.sec_operator oo, params1.sec_staff s WHERE s.staff_id = oo.staff_id AND oo.state = 1 AND oo.staff_id NOT in ('123402933','123395474','123404209')) d ON c.dev_phone = d.bill_id WHERE c.corp_org = 3056'; -- 执行sql EXECUTE IMMEDIATE sql_tem; COMMIT; END get_dev_cs;

2023-07-14 上传