可以通过启用或禁用实例化视图来控制数据库服务器能否使用该视图。优化期间,优化程序也不会考虑禁用的实例化视图。如果某个查询显式地引用禁用的实例化视图,则查询会失败并返回错误。禁用实例化视图时,数据库服务器会删除视图的数据,但保留数据库中的定义。实例化视图在重新启用后处于未初始化状态,必须进行刷新才能在其中填入数据。
禁用实例化视图时,数据库服务器会自动禁用依赖于实例化视图的常规视图。因此,重新启用实例化视图后,必须重新启用所有相关视图。为此,禁用实例化视图前,最好确定出其相关视图的列表。为此可使用 sa_dependent_views 系统过程。此过程会检查 ISYSDEPENDENCY 系统表并返回相关视图的列表(如果有)。
禁用实例化视图时,将删除数据和索引。如果视图是快速视图,会更改为手动视图。因此,重新启用实例化视图时,需要刷新它,重建索引,并将其更改回快速视图(如果需要)。
可以对禁用的对象授予权限。对禁用对象的权限存储在数据库中,在对象被启用时生效。
以具有 DBA 权限的用户身份,或以实例化视图所有者身份连接到数据库。
在左窗格中,双击 [视图]。
右击实例化视图,并选择 [禁用]。
以具有 DBA 权限的用户身份,或以实例化视图所有者身份连接到数据库。
执行 ALTER MATERIALIZED VIEW ...DISABLE 语句来禁用每个相关实例化视图。
以下示例创建 EmployeeConfid55 实例化视图,并对其初始化,然后将其禁用。禁用该实例化视图后,实例化视图的数据将被删除,实例化视图的定义会保留在数据库中,实例化视图不能由数据库服务器使用,并且相关视图将被禁用(如果有)。
CREATE MATERIALIZED VIEW EmployeeConfid55 AS SELECT EmployeeID, Employees.DepartmentID, SocialSecurityNumber, Salary, ManagerID, Departments.DepartmentName, Departments.DepartmentHeadID FROM Employees, Departments WHERE Employees.DepartmentID=Departments.DepartmentID; REFRESH MATERIALIZED VIEW EmployeeConfid55; ALTER MATERIALIZED VIEW EmployeeConfid55 DISABLE; |
以具有 DBA 权限的用户身份,或以实例化视图所有者身份连接到数据库。
在左窗格中,双击 [视图]。
右击实例化视图,然后选择 [重新编译和启用]。
或者,右击视图,然后选择 [刷新数据] 以初始化该视图并在其中填充数据。
以具有 DBA 权限的用户身份,或以实例化视图所有者身份连接到数据库。
执行 ALTER MATERIALIZED VIEW ...ENABLE 语句。
或者,执行 REFRESH MATERIALIZED VIEW 以初始化视图并在其中填入数据。
以下两条语句分别重新启用 EmployeeConfid5 实例化视图,然后在其中填入数据。
ALTER MATERIALIZED VIEW EmployeeConfid55 ENABLE; REFRESH MATERIALIZED VIEW EmployeeConfid55; |
使用完该示例后,应删除所创建的实例化视图。否则,在试验其它示例时,将无法对其基础表 Employees 和 Departments 执行模式更改。无法变更具有已启用相关实例化视图的表的模式。请参见删除实例化视图。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |