OAKLAND, Calif. (AP) -- The passing game clicked, the defense created turnovers and the special teams were strong once again.
The Oakland Raiders put together their most complete performance of the preseason, yet coach Art Shell is far from satisfied.
Aaron Brooks threw an 8-yard touchdown pass to Doug Gabriel on Oakland's opening drive, and Andrew Walter led the Raiders to two second-half scores in a 23-7 victory Sunday night over the San Francisco 49ers.
"We're not where we need to be," Shell said. "We're not where I want to be. We're not there. I expect a more efficient football team throughout. But I thought they performed better as a team today than the last two weeks."
Oakland improved to 3-0 in preseason under Shell, who coached the Raiders for the first time at the Coliseum. Shell, who played most of his Hall of Fame career in Oakland, coached the team for 4½ seasons when it played in Los Angeles.
"It was really nice to walk back in the stadium on this side and be a part of it again," Shell said.
The Raiders ran for 156 yards, completed 67 percent of their passes, committed no procedural penalties and scored on five of their first eight drives. They also held the 49ers to 209 yards.
"We're taking strides," Raiders defensive tackle Warren Sapp said. "We took a really good step today. The offense moved the ball. We played nice tight defense and created turnovers. ... This is the NFL, my friend. Whenever you can do that, you're playing good football."
San Francisco coach Mike Nolan was disappointed with his team's performance, calling it a step back from last week's 28-14 win over Chicago.
"A very flat performance from our football team," Nolan said. "It started that way in our warmups, and I thought we were flat the entire game. We missed tackles, we missed opportunities for turnovers, and much the same offensively. I was not pleased with the tempo."
After completing only one pass in each of Oakland's first two exhibition games, Brooks came out looking sharp, completing an 11-yard pass to Gabriel on his first play.
He was 4-for-5 for 42 yards on the 75-yard drive and also had a 25-yard scramble. He was helped out when Mike Adams dropped a potential interception at the goal line three plays before the touchdown pass to Gabriel.
Brooks also had problems at times. He missed an open Alvis Whitted on a deep pass, threw an interception in the end zone and botched a handoff to LaMont Jordan that nearly led to another turnover.
"It was a slow start for us offensively the first two games," Brooks said. "I know we made some strides this game, but it's a process. Every time we get out on the football field, whether it's practice or a game, we just want to get better. I felt we did that tonight."
Walter went 8-for-9 for 99 yards, leading scoring drives on both of his possessions. Justin Fargas scored on a 3-yard run to cap the first drive, and David Kimball kicked a 23-yard field goal to end the second drive.
San Francisco quarterback Alex Smith, who had a strong preseason opener, struggled against the Raiders. He began the game by throwing an off-target lateral to Bryan Gilmore that ended up as a 12-yard loss and ended his half by throwing a pass that was intercepted by Tyrone Poole.
Smith was intercepted earlier in the half by Raiders first-round pick Michael Huff, who left the game with a slightly sprained left ankle. Smith went 6-for-12 for 81 yards.
"I can probably count on just one hand the number of plays I'd like to redo, but that'll be good to sit down and go over," Smith said. "It's something we can learn from."
Before the game, the 49ers traded running back Kevan Barlow to the New York Jets for an undisclosed 2007 draft pick. The trade officially makes Frank Gore the starter. Gore, San Francisco's leading rusher as a rookie last year with 608 yards, gained 42 yards on seven carries.
The Raiders have five interceptions through three preseason games, matching their total from the 2005 regular season.