BALTIMORE (AP) -- Showing absolutely no evidence that he spent the past three weeks on the disabled list, Daniel Cabrera pitched a gem against the best-hitting team in the majors.
Kevin Millar homered and Corey Patterson scored two runs and extended his streak of games with a stolen base to nine, the longest run in the majors since Rickey Henderson had an identical stretch in 1986.
But the key to the victory was Cabrera (3-2), who was activated from the DL before the game after being sidelined since May 15 with a strained muscle in his right shoulder. He walked four but didn't allow a runner past second base in earning his first win in four starts since April 28.
"I feel great. The team won today, and that's a good thing," Cabrera said. "I threw a lot of breaking balls today, and it worked really good."
Cabrera needed 101 pitches to get through his five-inning stint. Manager Sam Perlozzo would have preferred keeping the right-hander under 100 pitches on his first day back but wanted the pitcher to get the victory.
"Coming back, first outing after being on the disabled list, and he was almost unhittable," Perlozzo said. "He deserved to stay in there to get the win."
Said Cabrera: "I say thank you to him for that."
Toronto, which came in with a major league-best .303 team average, managed only four singles and struck out 10 times against Cabrera and three relievers. It was the second time in 56 games that the Blue Jays were shut out.
"Daniel's one of the best pitchers we've faced all year. When he's throwing the ball over the plate, he's awfully tough," said Gregg Zaun, who singled off Cabrera in the fifth. "You're looking anywhere from 95 to 98, moving all over the place and he's got a nasty curveball. I think he's even throwing a split-finger now. He
makes it tough on you every time you go out there."
The biggest flaw in Cabrera's game is his control. He leads the AL with 43 walks, despite being out for three weeks, and his pitch count also becomes elevated by his strikeouts.
"This guy, when he's in the strike zone he's as good as anyone in the big leagues," Millar said. "He's got to use the defense more so he can pitch more innings. He strikes so many guys out, he gets a high pitch count."
Toronto was without third baseman Troy Glaus, who had a stiff back after colliding with teammate Aaron Hill in Sunday's game in Tampa Bay. Glaus was replaced by Shea Hillenbrand, who went 0-for-4 and made two errors.
The rest of the Blue Jays didn't fare much better.
"We just look like we came out a little flat today," Zaun said. "Really no excuse for that, no reason for it. I know guys were trying as hard as they could. We didn't have a real good
energy level tonight, and that seemed to carry all the way though the game."
Ted Lilly (5-6) allowed four runs, three earned, and 10 hits in six innings. He came in 5-1 lifetime against Baltimore, including 2-0 this season.
"Ted hung in there pretty good," Toronto manager John Gibbons said. "Overall, I thought he did a nice job. We just got shut out."
The Orioles went up 2-0 in the second inning. Millar led off with his sixth homer, the third in five games. Patterson walked, took third on a single by Javy Lopez and scored on a bloop single by Jeff Conine.
The Orioles added an unearned run in the fifth. Patterson beat out a two-out bunt and received credit for a stolen base when Lilly's pitchout soared to the screen. Hillenbrand then threw wildly to first after fielding a grounder by Lopez, allowing Patterson to score.
To make room for Cabrera on the 25-man roster, the Orioles designated catcher Raul Chavez for assignment. ... Toronto's Alex Rios, who came in with an AL-best .360 batting average, went 1-for-4. ... Millar has eight RBI in his last five games. ... Baltimore had 21 straight steals without being caught before Brian Roberts was cut down in the sixth.